Django模板系統
阿新 • • 發佈:2018-05-07
tin length RM lis cat HA 變量名 格式 temp
官方文檔鏈接:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for
只需要記兩種特殊符號:
{{ }}和 {% %}
變量相關的用{{}},邏輯相關的用{%%}。
{{ 變量名 }}
變量名由字母數字和下劃線組成。
點(.)在模板語言中有特殊的含義,用來獲取對象的相應屬性值。
幾個例子:
view中代碼:
def Test(request): from datetime import datetime now=datetime.now() name=‘yimi‘ age=25 hobbly_list=[‘聽歌‘,‘打球‘,‘發呆‘] hobbly_dict={‘yimi‘:‘發呆‘,‘haha‘:‘聽歌‘,‘wawa‘: ‘打球‘} file_size=131413141314 blog=‘<a href="http://www.cnblogs.com/liwenzhou/p/7931828.html">點我</a>‘ file=‘daishdfkanf riwyjlasdnakjfhqiuwryqcscnaksdfhlairyqi sfjdskdfhiubvaidkaw‘ class Person(): def __init__(self,name,age): self.name=name self.age=age def __str__(self): return ‘我叫%s,今年%s歲‘%(self.name,self.age) #在內置方法中必須加上self.屬性 yimi=Person(‘yimi‘,25) haha=Person(‘haha‘,26) wawa=Person(‘wawa‘,28) person_list=[yimi,haha,wawa] return render(request,‘test.html‘,{ ‘name‘:name, ‘age‘:age, ‘hobbly_list‘:hobbly_list, ‘person_list‘:person_list, ‘file_size‘:file_size, ‘now_time‘:now, ‘blog‘:blog, ‘file‘:file })
模板中支持的寫法:
{# 取l中的第一個參數 #} {{ hobbly_list.0 }} {# 取字典中key的值 #} {{ d.name }} {# 取對象的name屬性 #} {{ person_list.0.name }} {# .操作只能調用不帶參數的方法 #} {{ person_list.0.dream }}
語法: {{ value|filter_name:參數 }}
在templates中的代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>試驗</title> </head> <body> {{ name }} <hr> {{ age }} <hr> <ul> {% for hobbly in hobbly_list %} <li>{{ hobbly }}</li> {% endfor %} </ul> <hr> <ul> {% for person in person_list %} <li>{{ person.name }}</li> <li>{{ person.age }}</li> <li>{{ person }}</li> {% endfor %} </ul> <hr> {{names|default:‘沒有這個變量‘ }} #如果value(names)值沒傳的話就顯示默認參數:‘沒有這個變量‘ <hr> {{name|length }} #‘|‘左右沒有空格沒有空格沒有空格返回value的長度,如 value=‘yimi‘的話,就顯示4. <hr> {{file_size|filesizeformat}} #將值格式化為一個 “人類可讀的” 文件尺寸 (例如 ‘13 KB‘, ‘4.1 MB‘, ‘102 bytes‘, 等等) <hr> {{ name|slice:‘1:3‘ }} {{ age|slice:‘0:1‘ }} #切片 #數字類型不能切片 <hr> {{ now_time|date:‘Y-m-d H-i-s‘ }} #格式化 轉換成我們能一眼讀懂的格式:年月日 時分秒 <hr> {{ blog|safe }} {{ blog }} #為了保證安全性。Django的模板中會對HTML標簽和JS等語法標簽進行自動轉義,如果不希望被轉義,在value後面加上safe <hr> {{ file }} <hr> {{ file|truncatechars:9 }}
#truncatechars後面必須加上字符數量
#如果字符串字符多於指定的字符數量,那麽會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結尾。 <hr> </body> </html>
顯示在頁面上的結果
自定義過濾器只是帶有一個或兩個參數的Python函數:
- 變量(輸入)的值 - -不一定是一個字符串
- 參數的值 - 這可以有一個默認值,或完全省略
例如,在過濾器{{var | foo:“bar”}}中,過濾器foo將傳遞變量var和參數“bar”。
自定義filter代碼文件擺放位置:
結果:
for
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul>
for循環可用的一些參數:
for ... empty
如果循環的課叠代對象沒有值,則走empty下面的內容
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul>
if,elif和
else
{% if user_list %} 用戶人數:{{ user_list|length }} {% elif black_list %} 黑名單數:{{ black_list|length }} {% else %} 沒有用戶 {% endif %}
當然也可以只有if和else
{% if user_list|length > 5 %} 七座豪華SUV {% else %} 黃包車 {% endif %}
if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
with
定義一個中間變量,相當於給一個變量起一個別名
<p> {% with hobbly=hobbly_dict.yimi %} {{ hobbly }} {% endwith %} </p>
結果:
發呆
Django模板系統