Template
ใน Django เราสามารถสร้าง template สำหรับแสดงผล (presentation) ให้แยกกับส่วน logic ลองมาดู concept ของ template กันอย่างกระชับ
เริ่มจากการเปิด python prompt แล้ว ลอง code ต่อไปนี้
>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> c = template.Context({'name': 'Adrian'})
>>> print t.render(c)
My name is Adrian.
>>> c = template.Context({'name': 'Fred'})
>>> print t.render(c)
My name is Fred.
ลองมาดู code กัน
1. import template เข้ามา
2. สร้าง template ชื่อ t
3. สร้าง context c ขึ้นมา โดยใน context นี้มีค่า name=Andrian
4. ให้ template t แสดงผลโดยอ้างอิง context c จะได้ผลลัพธ์ออกมา
5. เปลี่ยนค่า context c โดยให้ name=Fred
6. ให้ template t แสดงผลโดยอ้างอิง context c จะได้ผลลัพธ์ออกมา เนื่องจาก context c เปลี่ยนค่าไป ผลจึงออกมาไม่เหมือนเดิม
เรานำ template มาประยุกต์ใช้กับ view ได้หลายวิธี แต่วิธีแนะนำเพื่อที่จะแยก ระหว่าง presentation กับ logic ขั้นตอนมีดังนี้
1. กำหนด template directory ใน settings.py โดย TEMPLATE_DIRS ในที่นี้จะสร้าง folder ที่ชื่อ templates ใน folder mysite
import os.path
....................
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
2. เพิ่ม code ส่วนนี้ไปใน views.py
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
t = get_template('current_datetime.html')
html = t.render(Context({'current_date': now}))
return HttpResponse(html)
หรือเราจะใช้ feature ที่ชื่อ shortcut ใน Django เพื่อประหยัดการเขียน code
from django.shortcuts import render_to_response
import datetime
def current_datetime(request):
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date': now})
โดย current_datetime.html จะเป็น html ไฟล์ที่มี Tag (คล้ายๆ PHP) โดยส่งค่า context ไปให้(ในกรณีนี้ current_date เป็น object ประเภท datetime)
Template Tag
ในส่วนนี้เราจะสรุป Template Tag คร่าวๆ
1. Tag ใน template จะอยู่ในเครื่องหมายปีกกา {} (คล้ายๆ PHP อยู่ระหว่า )
2. การอ้างอิงถึง variable ทำได้โดย ใช้ {{ variable_name }}
3. มี control ต่างๆ ดังนี้
- {% if %}, {% else %}, {% endif %}
- {% for %}, {% endfor %}
- {% ifequal %},{% ifnotequal %}, {% endifequal %}, {% endifnotequal %}
4. comment
- บรรทัดเดียวใช้ {# #}
- หลายบรรทัดใช้ {% comment %}, {% endcomment %}
5. สามารถใช้ filter ได้
- {{ name|lower }} เป็นการเปลี่ยนค่า name ให้เป็น lower case
- filter สามารถ pipe ได้ {{ my_list|first|upper }} เป็นการดึงค่าแรกใน my_list ออกมาแล้วเปลี่ยนเป็น upper case
>>> from django import template
ReplyDelete>>> t = template.Template('My name is {{ name }}.')
Traceback (most recent call last):
File "", line 1, in ?
อยากจะให้อธิบายหน่อย ครับ
หมายถึง code หรือว่า error ที่เกิดขึ้นครับ
ReplyDeleteถ้าเป็น code นี่ อธิบายง่ายๆ สำหรับคนเคยเขียน PHP
ข้อความ 'My name is {{ name }}.' เปรียบเสมือน ไฟล์ PHP
ไฟล์หนึ่ง (แต่เราไม่ได้เขียนใส่ไฟล์ต่างหาก) ซึ่งติดตัวแปร name อยู่
เราให้ค่า name ผ่านทาง context ที่ชื่อว่า c
ส่วน error ขอ error ทั้งหมดนะครับ
This design is spectacular! You definitely know how to keep a reader entertained.
ReplyDeleteBetween your wit and your videos, I was almost moved to start my own blog (well, almost...HaHa!) Great job.
I really loved what you had to say, and more than that,
how you presented it. Too cool!
Also visit my web page บริการ seo ราคาถูก