Django2.0-templates(3)-模版標籤
阿新 • • 發佈:2018-12-19
常用的模板標籤
-
if
標籤。需要{% %}
包裹。可以使用==, !=, <, <=, >, >=, in, not in, is, is not
等判斷運算子- 變數名直接寫,不用
{{}}
包裹,包裹的是要輸出的
- 變數名直接寫,不用
-
for...in...
標籤。可以遍歷列表,元組,字串,字典等- 新增
reversed
可以翻轉順序 - 在
DTL
中,執行一個方法不能使用圓括號的形式。遍歷字典的時候,如果需要items
keys
values
方法,用dict.items
這種方式獲得 for
迴圈中,DTL
提供了一些變數可供使用forloop.counter
: 當前迴圈的下標。以1作為起始值forloop.counter0
forloop.revcounter
: 當前迴圈的方向下標值。預設1是最後的結束值forloop.revcounter0
: 當前迴圈的方向下標值。預設0是最後你結束值forloop.first
: 是否是第一次遍歷forloop.last
: 是否是最後一次遍歷forloop.parentloop
: 如果有多次迴圈巢狀,這個屬性代表的是上一級的for迴圈
for...in...
沒有continue和break!!!!!!!!!!!!!
- 新增
-
for...in...empty
標籤。 如果遍歷的物件沒有元素,會執行empty
中的內容-
if和for標籤
def
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1> {% if number > 50 %} 大於50 {% endif %} </h1> <h1> {% for list in lists %} {{ list }} {% endfor %} <br> {% for list in lists reversed %} {{ list }} {% endfor %} </h1> <h2> {% for dict in dicts %} {{ dict }} {% endfor %} <br> {% for value in dicts.values %} 當前的下標是 {{ forloop.counter }} {{ value }} <br> {% endfor %} <br> </h2> <h3> {% for empty_dict in empty_dicts %} {{ empty_dict }} {% empty %} nothing there {% endfor %} </h3> </body> </html>
執行
-
-
with
標籤。定義變數。有兩種使用方式# views.py d = { "person": [ "jack", "lee", ], } def func(request): return render(request, "index.html", context=d)
-
one
<!-- html --> {% with name=person.0 %} {{ name }} {% endwith %}
-
two
<!-- html --> {% with person.0 as name %} {{ name }} {% endwith %}
-
注意
=
前後不能有空格 -
這個別名的作用域只在
with
語句塊內<!-- html --> {% with person.0 as name %} {{ name }} {{ name }} {% endwith %} {{ name }} {# 這一句沒執行 #}
-
-
url
標籤。 類似reverse()
函式。會用到對映時URL指定過的名字進行反轉<!-- html --> <a href="{% url 'book:list' %}"> 列表 </a> (# 這裡'book:list'是定義在app_name是book的名為list的URL#) {# url和'book:list'之間需要空格,也就是說空格是分隔符#}
-
傳遞引數。和
reverse()
類似位置引數和關鍵字引數不可以同時用。
# urls.py path("detail/<book_id>/", views.book_detail,name="detail") # 這個url是帶引數的 # views.py def book_detail(request, book_id): next = request.GET.get("page") if next: return HttpResponse("book_id is {}, query_string is {}".format(book_id, next))
<!-- html --> {# url反轉,使用位置引數 #} <a href="{% url 'book:detail’ 1 %}"> 頁面 </a> {# 位置引數根據URL的變數位置進行排列 #} {# url反轉, 使用關鍵字引數 #} <a href="(% url 'book:detail' book_id=1 %)"> 頁面 </a>
如果想要傳遞查詢字串的引數,必須手動在後面新增
<!-- html --> <a href = "{% url 'book:detal' book_id=1 %}?page=1"> 頁面 </a>
如果要傳遞多個引數,那麼通過空格進行分割
<!-- html --> <a href = {% url 'book:detail' book_id=1 page=2 %}> 頁面 </a>
-
-
spaceless
標籤。移除html標籤中的空白字元。包括空格、tab鍵,換行等。-
使用
{% spaceless %} <p> <a href="index/">INDEX</a> </p> {% endspaceless %}
-
渲染完畢後是以下格式
<p><a href="index/">INDEX</a></p>
-
spaceless
只會移除html標籤之間的空白字元。而不會移除標籤與文字之間的空白字元。
-
-
autoescape
標籤。自動轉義,會將哪些特殊字元進行轉義,比如會將<
轉義成<
等。DTL
預設開啟。不容易出現XSS漏洞。def url_page(request): d = dict{ "baidu": "<a href = 'http://www.baidu.com'>百度</a>" }
{% autoescape off %} {{ baidu }} {% endautoescape %}
-
verbatim
標籤。預設在DTL
模板中會去解析哪些特殊字元, 比如{%}
和%}
,{{
和}}
等。如果在某個程式碼片段中不想使用這個解析引擎,比如使用了其他類似的模板時,可以把這個程式碼片段放在verbatim
標籤中。{% verbatim %} {{ name }} {% endverbatim %}}