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