วันอาทิตย์ที่ 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.questiondjangoCMS 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 เริ่มทำงาน |
สมัครสมาชิก:
ส่งความคิดเห็น
(
Atom
)
ไม่มีความคิดเห็น :
แสดงความคิดเห็น