2011年5月18日 星期三

Django Template

先紀錄一下使用 def 時的小小注意事項~
例如:def xxx(request,abc):
傳入值 abc 一定為字串
如果傳入是 123 的話就要用 int(abc) 來轉換成數值進行後續的計算

Template
{{ p }} 變量(變數)
{% p %} Template Tag
{# ... #} 單行注釋
{% comment %}.......{% endcomment %} 多行注釋
*在練習過程中發現,HTML在存檔時必需要將編碼存成 utf-8 不然在執行時會顯示錯誤 UnicodeDecodeError

設計 Template 通常開一個資料匣來存放 html
這時就要在 Settings.py 的 TEMPLATE_DIRS 設定好路徑
例:TEMPLATE_DIRS = ('C:/TestWeb/Templates', )
在 Windows 系統底下路徑是要用斜線,不是反斜線

在 Django中叫用 Template 可以使用 render_to_response 來簡化程式
例如在 html 中要顯示目前日期時間
nowdatetime.html
<html>
<body>
目前日期時間:{{ nowdatetime }}
</body>
</html>

在 py 中可寫成
urls.py
from django.conf.urls.defaults import *
from TestWeb.view import *
urlpatterns = patterns('', ('^datetime/$', datetime))

view.py
from django.shortcuts import render_to_response
import datetime
def datetime(request):
      now = datetime.datetime.now()
      return render_to_response('nowdatetime.html', {'nowdatetime': now})

* render_to_response 簡化了下列程式
view.py
   from django.template.loader import get_template
   from django.template import Context
   from django.http import HttpResponse
   import datetime
   def datetime(request):
         now = datetime.datetime.now()
         t = get_template('nowdatetime.html')
         html = t.render(Context({'nowdatetime': now}))
         return HttpResponse(html)

Template 繼承
在 html 中放置 {% block xxx %} 區段
例如:
base.html
<html>
<body>
姓名 {% block name %}{% endblock %}
年齡 {% block age %}{% endblock %}
</body>
</html>

使用 {% extends %} 繼承 base.html
例如:
member.html
<html>
<body>
{% extends "base.html" %}
{% block name %}My name is Frank{% endblock %}
{% block age %}30{% endblock %}
</body>
</html>

沒有留言:

張貼留言