模闆傳遞參數
變量需要通過視圖函數渲染,視圖函數在使用 render 或者 render_to_string 的時候可以傳遞一個 context 的參數,這個參數是一個字典類型。以後在模闆中的變量就從這個字典中讀取值的
front/views.py
from django.shortcuts import render
class Person(object):
def __init__(self, username):
self.username = username
def index(request):
p = Person("name")
context = {
"person": p
}
return render(request, "index.html", context=context)
# 在index.html模闆檔案中可以通過{{ person.username }}擷取對象的username屬性值
注意:不能通過中括号的形式通路字典和清單中的值,比如dict[‘key’]和list[1]是不支援的!
模闆中的變量同樣也支援 點(.) 的形式。在出現了點的情況,比如person.username ,模闆是按照以下方式進行解析的:
- 如果 person 是一個字典,那麼就會查找這個字典的 username 這個 key 對應的值。
- 如果 person 是一個對象,那麼就會查找這個對象的 username 屬性,或者是 username 這個方法。
- 如果出現的是 person.0 ,會判斷 persons 是否是一個清單或者元組或者任意的可以通過下标通路的對象,如果是的話就取這個清單的第1個值。如果不是就擷取到的是一個空的字元串。
在for循環中,有一些自帶的變量可供使用:
- forloop.counter:目前循環的下标,以1作為起始。如果在後面加個0,就以0作為起始
- forloop.revcounter:循環的反向下标,以1作為最後一個下标值。後面加0,以0作為最後一個下标
- fouloop.first:是否是第一次周遊
- forloop.last:是否是最後一次周遊
for…in…标簽
{% for hero in heros reversed %} # 後面加reversed表示反向周遊
<li>{{ i }}</li>
{% endfor %}
周遊字典的時候,可以使用keys, values, items方法輸出字典的鍵值等
{% for key, value in user.items %}
<li>{{ key }}: {{ value }}</li>
{% endfor %}
for…in…empty,如果周遊的對象沒有可疊代的元素的話,就會執行empty中的内容,意思就是周遊對象必須為空
{% for comment in comments %}
{{ comment }}
{% empty %}
沒有任何評論
{% endfor %}
with标簽的使用,可以把一個複雜的變量緩存到一個臨時變量上
- 在with語句中定義的變量,隻能在{%with%}{%endwith%}中使用,不能在外面使用
- 定義變量的時候,不能再等号兩邊留有空格,比如{%with name = person.1 %}是錯誤的
{% with name=person.1 %}
{{ name }}
{% endwith %}
下面這種寫法也是正确的
{% with person.1 as name %}
{{ name }}
{% endwith %}