1. 程式人生 > >千與千尋django(三)---django的模板系統

千與千尋django(三)---django的模板系統

過濾器:{{ship_date|date:"F j, Y"}}把ship_date變數傳遞給過濾器
並給date過濾器傳遞了一個引數“F j, Y”,date過濾器以給定引數的形式格式化日期 

使用模板系統

step1:用模板程式碼建立一個Template物件 step2:使用一些給定變數context(模板使用它來得到變數的值)呼叫Template物件的render()(context呼叫Template物件的render()方法來填充模板)方法 

模板的載入

你可以直接以讀取檔案的形式來讀取html模板所在的位置,顯然那樣並不優雅,django為我們解決了,在settings.py檔案中你可以利用這個TEMPLATE_DIRS來指定模板的位置 TEMPLATE_DIRS=( 'F:/work/javaWork/mysite/templates/', )

其控制程式碼為
from django.http import HttpResponse
import datetime
from django.template.context import Context
from django.template.loader import get_template
'''
Created on 2013-3-21

@author: Senssic
'''


def helloword(request):
    str="hello word"
    return HttpResponse(str)
def templates(request):
    t=get_template("helloword.html")
    c=Context({'person_name': 'senssic',
               'product': 'person',
               'company': 'senssiccmopenty',
               'ship_date': datetime.date(2013, 3, 21),
               'ordered_warranty': True
               })
    html=t.render(c)
    return HttpResponse(html)

url配置為: (r'^templates/$',templates),    好了我們執行一下吧
結果正是我們期待的 呵呵,功能真強大啊,不過有好多需要注意的地方 1.配置模板的位置一定要注意 2.還有個簡單的控制函式直接返回了:render_to_response() 一般比較常用哦親

def helloword(request):     
    return render_to_response('helloword.html',{'person_name': 'senssic',
               'product': 'person',
               'company': 'senssiccmopenty',
               'ship_date': datetime.date(2013, 3, 21),
               'ordered_warranty': True
               })
                  


模板需要注意的地方

關於方法呼叫

1.在方法查詢的時候,如果一個方法觸發了異常,這個異常會傳遞從而導致渲染失 
敗.


2.方法呼叫僅僅在它沒有引數時起作用

模板標籤和過濾器基礎

1.if/else 
{% if %}標籤計算一個變數值,如果是“true”,即它存在、不為空並且不是false的boolean值 
系統則會顯示{% if %}和{% endif %}間的所有內容
{% if %}標籤接受and,or或者not來測試多個變數值或者否定一個給定的變數
確認使用{% endif %}來關閉{% if %}標籤


2.for 
{% for %}標籤允許你按順序遍歷一個序列中的各個元素 
Python的for語句語法為for X in Y,X是用來遍歷Y的變數 
每次迴圈模板系統都會渲染{% for %}和{% endfor %}之間的所有內容 
例如,顯示給定athlete_list變數來顯示athlete列表
系統不支援中斷迴圈,如果你想這樣,你可以改變你想遍歷的變數來使得變數只包含你想遍歷的值 
類似的,系統也不支援continue語句
{% for %}標籤內建了一個forloop模板變數,這個變數含有一些屬性可以提供給你一些關於迴圈的資訊 
一,forloop.counter表示迴圈的次數,它從1開始計數,第一次迴圈設為1,例如: 
二,forloop.counter0類似於forloop.counter,但它是從0開始計數,第一次迴圈設為0 
三,forloop.revcounter表示迴圈中剩下的items數量,第一次迴圈時設為items總數,最後一次設為1 
四,forloop.revcounter0類似於forloop.revcounter,但它是表示的數量少一個,即最後一次迴圈時設為0 
五,forloop.first當第一次迴圈時值為True,在特別情況下很有用: 
六,forloop.last當最後一次迴圈時值為True 
七,forloop.parentloop在巢狀迴圈中表示父迴圈的forloop: 
八,forloop變數只能在迴圈中得到,當模板解析器到達{% endfor %}時forloop就消失了 
3.ifequal/ifnotequal 
{% ifequal %}比較兩個值,如果相等,則顯示{% ifequal %}和{% endifequal %}之間的所有內容
4.過濾器
模板過濾器是變數顯示前轉換它們的值的方式
eg:{{ sex|lower }}
這將顯示通過lower過濾器過濾後{{ name }}變數的值,它將文字轉換成小寫 
使用(|)管道來申請一個過濾器 
過濾器可以串成鏈,即一個過濾器的結果可以傳向下一個 
有些過濾器需要引數,需要引數的過濾器的樣子:{{ bio|truncatewords:"30" }}  
這將顯示bio標量的前30個字,過濾器引數一直使用雙引號