{% 開始標簽 %}
....
{% 結(jié)束標簽%}
例:{% if ... %}
{% elif %}
{% else %}
{% endif %}
if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
# for 標簽帶有一個可選的{% empty %} 從句,以便在給出的組是空的或者沒有被找到時,可以有所操作。
{% for person in person_list %}
{{ person.name }}
{% empty %}
sorry,no person here
{% endfor %}
注:循環(huán)序號可以通過{{forloop}}顯示
?forloop.counter 當(dāng)前循環(huán)的索引值(從1開始)
forloop.counter0 當(dāng)前循環(huán)的索引值(從0開始)
forloop.revcounter 當(dāng)前循環(huán)的倒序索引值(從1開始)
forloop.revcounter0 當(dāng)前循環(huán)的倒序索引值(從0開始)
forloop.first 當(dāng)前循環(huán)是不是第一次循環(huán)(布爾值)
forloop.last 當(dāng)前循環(huán)是不是最后一次循環(huán)(布爾值)
forloop.parentloop 本層循環(huán)的外層循環(huán)
# with起別名
{% with d.hobby.3.info as nb %}
{{ nb }}
在with語法內(nèi)就可以通過as后面的別名快速的使用到前面非常復(fù)雜獲取數(shù)據(jù)的方式
{% endwith %}
先三步走
1.在應(yīng)用下創(chuàng)建一個名字”必須“叫templatetags文件夾
2.在該文件夾內(nèi)創(chuàng)建“任意”名稱的py文件 eg:mytag.py
3.在該py文件內(nèi)"必須"先書寫下面兩句話(單詞一個都不能錯)
from django import template
register = template.Library()
4.然后在再其中輸入需要自定義的東西,如下:
"""
# 自定義過濾器
@register.filter(name='baby')
def my_sum(v1, v2):
return v1 + v2
# 使用
{% load mytag %} #模板層加載mytag文件
{{ n|baby:666 }}
# 自定義標簽(參數(shù)可以有多個) 類似于自定義函數(shù)
@register.simple_tag(name='plus')
def index(a,b,c,d):
return '%s-%s-%s-%s'%(a,b,c,d)
# 使用
標簽多個參數(shù)彼此之間空格隔開
{% plus 'jason' 123 123 123 %}
# 自定義inclusion_tag
"""
內(nèi)部原理
先定義一個方法
在頁面上調(diào)用該方法 并且可以傳值
該方法會生成一些數(shù)據(jù)然后傳遞給一個html頁面
之后將渲染好的結(jié)果放到調(diào)用的位置
"""
@register.inclusion_tag('left_menu.html')
def left(n):
data = ['第{}項'.format(i) for i in range(n)]
# 第一種
# return {'data':data} # 將data傳遞給left_menu.html
# 第二種
return locals() # 將data傳遞給left_menu.html
{% left 5 %}
# 總結(jié):當(dāng)html頁面某一個地方的頁面需要傳參數(shù)才能夠動態(tài)的渲染出來,并且在多個頁面上都需要使用到該局部 那么就考慮將該局部頁面做成inclusion_tag形式
(在講bbs的時候會使用到)