ระบบควบคุมในการกระจายและเข้าถึงข่าวสาร การประกาศ

วันอาทิตย์ที่ 20 กันยายน พ.ศ. 2558

django cms #3 Plugin

ไม่มีความคิดเห็น :
    จากบทเรียนที่ผ่านมาหน้าเว็บของเราประกอบด้วย placeholder ใน placeholder สามารถใส่ plug-in ต่างๆลงไปได้  มี static placeholder ที่แสดงอยู่ทุกหน้าของเว็บเรา    ในบทนี้เราจะทำการสร้าง poll app ลงไปในเว็บเรา และนำ poll app นั้นมาสร้างเป็น plug-in สำหรับเรียกใช้งานใน placeholder ได้

ติดตั้ง polls app

    เปิด command shell ให้เราอยู่ใน ENV\tutorial-project แล้วพิมพ์คำสั่ง

pip install -e git+http://git@github.com/divio/django-polls.git#egg=django-polls 
   ถ้าคำสั่งด้านบนใช้ไม่ได้ให้ clone polls app จาก
                               https://github.com/pychuang/django-1.8-tutorial

   ได้ไดเรกทอรี django-polls ดังนี้
   ENV\
            tutorial-project\
                                    \polls
                                            __init__.py
                                            admin.py
                                            models.py
                                            templates/
                                            tests.py
                                            urls.py
                                            views.py

  เข้าไปใน ENV\tutorial-project\mysite\settings.py เพิ่ม 'polls' ลงใน INSTALL_APPS ด้วย
      ในไดเรกทอรีเดิมเปิดไฟล์ urls.py
   ทำการเพิ่ม url(r'^polls/', include('polls.urls', namespace='polls')), ใน urlpatterns
  โดยให้  url(r'^', include('cms.urls')), เป็น url ตัวล่างสุดใน urlpetterns ดังนี้

cd .. ย้อนกลับไปยัง ENV\tutorial-project ที่มีไฟล์ manage.py อยู่แล้วพิมพ์คำสั่ง

  python manage.py migrate polls

    คำสั่งด้านบนทำให้เกิด database ของ polls app ของเรา เสร็จแล้วให้เราเข้าไปใน localhost:8000/admin/  เพื่อสร้าง polls และ choice สำหรับตอบคำถาม
หน้า Polls admin 

เข้าไปใน mysite/templates/polls/base.html แล้วพิมพ์โค้ด ดังนี้
{% extends 'base.html' %}

{% block content %}
    {% block polls_content %}
    {% endblock %}
{% endblock %}
เราจะสามารถเปิด polls app ของเราได้โดย http://localhost:8000/en/polls/

เห็นคำถามที่เราสร้างขึ้น

ทดลองเลือก choice
แสดงผลโหวต

สร้าง plugin


มายัง ENV\tutorial-project แล้วพิมพ์คำสั่ง python manage.py startapp polls_plugin
ได้ไดเรกทอรี ดังนี้
ENV\
        \tutorial-project
                      \polls_plugin
                                        __init__.py
                                        models.py
                                        tests.py
                                        urls.py
                                        views.py


สร้าง Plugin models

   เข้าไปใน ENV\tutorial-project\polls_plugin\models.py แล้วพิมพ์โค้ด ดังนี้
from django.db import models
from cms.models import CMSPlugin
from polls.models import Poll


class PollPlugin(CMSPlugin):
    poll = models.ForeignKey(Poll)

    def __unicode__(self):
        return self.poll.question
   djangoCMS plugins สืบทอด class จาก cms.models.CMSPlugin    

สร้าง Plugin Class

    ใน ENV\tutorial-project\polls_plugin สร้าง cms_plugins.py พิมพ์โค้ด ดังนี้
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from polls_plugin.models import PollPlugin
from django.utils.translation import ugettext as _


class CMSPollPlugin(CMSPluginBase):
    model = PollPlugin  # model where plugin data are saved
    module = _("Polls")
    name = _("Poll Plugin")  # name of the plugin in the interface
    render_template = "djangocms_polls/poll_plugin.html"

    def render(self, context, instance, placeholder):
        context.update({'instance': instance})
        return context

plugin_pool.register_plugin(CMSPollPlugin)  # register the plugin
ทุก plugin class สืบทอดจาก cms.plugin_base.CMSPluginBase และ register ตัวมันเองด้วย cms.plugin_pool.plugin.pool


template

    เข้าไปยัง ENV\tutorial-project\polls_plugin\templates\djangocms_polls แล้วสร้างไฟล์ poll_plugin.html แล้วพิมพ์โค้ด ดังนี้
<h1>{{ instance.poll.question }}</h1>

<form action="{% url 'polls:vote' instance.poll.id %}" method="post">
    {% csrf_token %}
    <div class="form-group">
        {% for choice in instance.poll.choice_set.all %}
            <div class="radio">
                <label>
                    <input type="radio" name="choice" value="{{ choice.id }}">
                    {{ choice.choice_text }}
                </label>
            </div>
        {% endfor %}
    </div>
    <input type="submit" value="Vote" />
</form>
ใส่ 'polls_plugin' ใน INSTALL_APPS เหมือนที่ทำกับ 'poll' ด้วย

 มายัง ENV\tutorial-project แล้วพิมพ์คำสั่ง
python manage.py makemigrations polls_plugin
python manage.py migrate polls_plugin
ลอง run server จากนี้เราเพิ่ม Poll Plugin ลงใน  placeholder ที่เราต้องการได้เลย


มี Polls Plugin ให้เราเลือก
Polls Plugin เริ่มทำงาน

ไม่มีความคิดเห็น :

แสดงความคิดเห็น