只須要記兩種特殊符號:html
{{ }}和 {% %}django
變量相關的用{{}},邏輯相關的用{%%}。安全
{{ 變量名 }}app
變量名由字母數字和下劃線組成。函數
點(.)在模板語言中有特殊的含義,用來獲取對象的相應屬性值。oop
例子:測試
{# 取l中的第一個參數 #} {{ l.0 }} {# 取字典中key的值 #} {{ d.name }} {# 取對象的name屬性 #} {{ person_list.0.name }} {# .操做只能調用不帶參數的方法 #} {{ person_list.0.dream }}
語法: {{ value|filter_name:參數 }}spa
default翻譯
{{ value:default: "nothing"}}
若是value值沒傳的話就顯示nothingcode
length
{{ value|length }}
'|'左右沒有空格沒有空格沒有空格
返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.
filesizeformat
將值格式化爲一個 「人類可讀的」 文件尺寸 (例如 '13 KB'
, '4.1 MB'
, '102 bytes'
, 等等)。例如:
{{ value|filesizeformat }}
若是 value 是 123456789,輸出將會是 117.7 MB。
slice
切片
{{value|slice:"2:-1"}}
date
格式化
{{ value|date:"Y-m-d H:i:s"}}
safe
Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,緣由顯而易見,這樣是爲了安全。可是有的時候咱們可能不但願這些HTML元素被轉義,好比咱們作一個內容管理系統,後臺添加的文章中是通過修飾的,這些修飾多是經過一個相似於FCKeditor編輯加註了HTML修飾符的文本,若是自動轉義的話顯示的就是保護HTML標籤的源文件。爲了在Django中關閉HTML的自動轉義有兩種方式,若是是一個單獨的變量咱們能夠經過過濾器「|safe」的方式告訴Django這段代碼是安全的沒必要轉義。
好比:
value = "<a href='#'>點我</a>"
{{ value|safe}}
若是字符串字符多於指定的字符數量,那麼會被截斷。截斷的字符串將以可翻譯的省略號序列(「...」)結尾。
參數:截斷的字符數
{{ value|truncatechars:9}}
自定義過濾器只是帶有一個或兩個參數的Python函數:
例如,在過濾器{{var | foo:「bar」}}中,過濾器foo將傳遞變量var和參數「bar」。
自定義filter代碼文件擺放位置:
app01/ __init__.py models.py templatetags/ # 在app01下面新建一個package package __init__.py app01_filters.py # 建一個存放自定義filter的文件 views.py
編寫自定義filter
from django import template register = template.Library() @register.filter(name="cut") def cut(value, arg): return value.replace(arg, "") @register.filter(name="addSB") def add_sb(value): return "{} SB".format(value)
使用自定義filter
{# 先導入咱們自定義filter那個文件 #} {% load app01_filters %} {# 使用咱們自定義的filter #} {{ somevariable|cut:"0" }} {{ d.name|addSB }}
for
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul>
for循環可用的一些參數:
Variable | Description |
---|---|
forloop.counter |
當前循環的索引值(從1開始) |
forloop.counter0 |
當前循環的索引值(從0開始) |
forloop.revcounter |
當前循環的倒序索引值(從1開始) |
forloop.revcounter0 |
當前循環的倒序索引值(從0開始) |
forloop.first |
當前循環是否是第一次循環(布爾值) |
forloop.last |
當前循環是否是最後一次循環(布爾值) |
forloop.parentloop |
本層循環的外層循環 |
for ... 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
定義一箇中間變量
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
這個標籤用於跨站請求僞造保護。
在頁面的form表單裏面寫上{% csrf_token %}
{# ... #}
總結:
本身寫例子:
def test(request): name='小黑' file_size=123456789 age=18 name_list=['王振','口哥',"嘻嘻"] name_list1=[[1,2,3],[4,5,6]] from datetime import datetime now=datetime.now() haha="<a href=‘http://www.baidu.com'>百度</a>" name_dict={'first_name':'王振',"last_name":'猛哥'} p1=Person('alex',48) p2 = Person('苑昊',18) # name_list=[p1,p2] return render( request, 'test.html', { 'name1':name, 'age1':age, "name_list":name_list, 'name_dict':name_dict, "name_list1": name_list1, 'file_size':file_size, 'now':now, 'haha':haha } )
test.html文件裏面的
<h1>模板語言測試</h1> {{ name1 }}{{ age1 }}{{ bucunzai }}#不存在顯示空 <hr> {{ name_list }} <ul> {% for name in name_list %} <li>{{ name }}</li> {% endfor %} </ul> {{ name_list.0 }}#取列表第一個元素 <hr> {{ name_dict }}#展現字典 {{ name_list.first_name }}|{{ name_dict.last_name }}#展現第一個和最後一個key的值 <hr> {{ name_list.0 }}\ {{ name_list.0.name }}\{{ name_list.0.age }}\#想要取得類中對象能夠先獲得列表而後.屬性 {{ name_list.0.dream }}\#得到類中的方法 <hr> {{ name_list1.0.1}}#得到列表中嵌套列表的第一個列表 {{ name_list1.1.0 }}#得到列表中嵌套列表的第二個列表,一共我寫了兩個分別是1,2,3,和4,5,6組成 <hr> {##列表切片取值#} {{ name_list1|slice:'0:-1' }} {{ name_list|slice:'0:-1' }} <br> {{ name_list1.0|slice:'1,-1' }} <hr> {#導入剛纔的filter方法#} {% load myfilter %} {{ name1|sb }}| {{ name_list.0|sb }} <hr> {#第一個參數是變量名| filter_name 也就是myfilter方法定義的:'內容'#} {{ name1|addstr:'口技好' }}<br> {{ name1|addstr:'腿毛多' }}|<br> {#計算長度#} {{ name1|length }}|<br> {#給沒有定義的變量設置默認值#} {{ name|default:'nothing' }}<br> {{ file_size| filesizeformat}}<br> {{ now|date:'Y-m-d H-i-s' }}<br> {{ haha|safe }}<br> {{ file_size|truncatechars:3 }}<br> {{ file_size|truncatechars:9 }}<br> {#for 循環與in連用#} {% for i in name_list %} {{forloop.counter }} <ul> {{i}} </ul> {# if elif endif連用#} {% endfor %}<br> {% if user_list %} 用戶人數:{{ user_list|length }} {% elif black_list %} 黑名單數:{{ black_list|length }} {% else %} 沒有用戶 {% endif %}
打印結果: