天天看點

Django模闆文法

模闆傳遞參數

變量需要通過視圖函數渲染,視圖函數在使用 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 ,模闆是按照以下方式進行解析的:
  1. 如果 person 是一個字典,那麼就會查找這個字典的 username 這個 key 對應的值。
  2. 如果 person 是一個對象,那麼就會查找這個對象的 username 屬性,或者是 username 這個方法。
  3. 如果出現的是 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 %}