1.首先是我寫的一個簡單的html文件html
<html> <head> <title>Title</title> </head> <body> {% for n in l %} <h1>this is {{ n }}</h1> {% endfor %} </body> </html>
在html文件中,我嵌入了一個for循環,而後用標籤<h1>顯示出每一次的結果。python
在這個for循環裏面,倆箇中括號括起來的 {{ n }} 稱爲變量,而一箇中括號一個百分號括起來的稱爲模板標籤{% %},這裏的模板標籤是for標籤,它就相似於python代碼裏的for語句,但與for語句仍是有些不一樣。django
2.那麼,咱們怎麼在python代碼中使用模板呢?簡單記錄一下app
在Python代碼中使用Django模板的最基本方式以下:函數
能夠用原始的模板代碼字符串建立一個 Template 對象, Django一樣支持用指定模板文件路徑的方式來建立 Template 對象;oop
調用模板對象的render方法,而且傳入一套變量context。它將返回一個基於模板的展示字符串,模板中的變量和標籤會被context值替換。post
from django.template import Template,Context t=Template('My name is {{ name }}') c=Context({'name':'cb'}) print(t.render(c)) My name is cb
3.標籤this
if/else
{% if %} 標籤檢查(evaluate)一個變量,若是這個變量爲真(即,變量存在,非空,不是布爾值假),系統會顯示在 {% if %} 和 {% endif %} 之間的任何內容,例如:lua
{% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %}{% else %} 標籤是可選的:spa
{% if today_is_weekend %} <p>Welcome to the weekend!</p> {% else %} <p>Get back to work.</p> {% endif %}Python 的「真值」
在Python和Django模板系統中,如下這些對象至關於布爾值的False
空列表([] )
空元組(() )
空字典({} )
空字符串('' )
零值(0 )
特殊對象None
對象False(很明顯)
沒有{% elif %}標籤,且必定要用 {% endif %} 關閉每個 {% if %} 標籤。
for
{% for %} 容許咱們在一個序列上迭代。 與Python的 for 語句的情形相似,循環語法是 for X in Y ,Y是要迭代的序列而X是在每個特定的循環中使用的變量名稱。 每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的全部內容。
在每一個`` {% for %}``循環裏有一個稱爲`` forloop`` 的模板變量。這個變量有一些提示循環進度信息的屬性。
forloop.counter 老是一個表示當前循環的執行次數的整數計數器。 這個計數器是從1開始的,因此在第一次循環時 forloop.counter 將會被設置爲1。
{% for item in todo_list %} <p>{{ forloop.counter }}: {{ item }}</p> {% endfor %}forloop.counter0 相似於 forloop.counter ,可是它是從0計數的。 第一次執行循環時這個變量會被設置爲0。
forloop.revcounter 是表示循環中剩餘項的整型變量。 在循環初次執行時 forloop.revcounter 將被設置爲序列中項的總數。 最後一次循環執行中,這個變量將被置1。
forloop.revcounter0 相似於 forloop.revcounter ,但它以0作爲結束索引。 在第一次執行循環時,該變量會被置爲序列的項的個數減1。
forloop 變量僅僅可以在循環中使用。 在模板解析器碰到{% endfor %}標籤後,forloop就不可訪問了。
ifequal/ifnotequal
{% ifequal %} 標籤比較兩個值,當他們相等時,顯示在 {% ifequal %} 和 {% endifequal %} 之中全部的值。和 {% if %} 相似, {% ifequal %} 支持可選的 {% else%} 標籤:
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}只有模板變量,字符串,整數和小數能夠做爲 {% ifequal %} 標籤的參數。
註釋
就像HTML或者Python,Django模板語言一樣提供代碼註釋。 註釋使用 {# #} :
{# This is a comment #}若是要實現多行註釋,可使用{% comment %}
{% comment %} This is a multi-line comment. {% endcomment %}過濾器
就象本章前面提到的同樣,模板過濾器是在變量被顯示前修改它的值的一個簡單方法。 過濾器使用管道字符,以下所示:
{{ name|lower }}顯示的內容是變量 {{ name }} 被過濾器 lower 處理後的結果,它功能是轉換文本爲小寫。
過濾管道能夠被* 套接* ,既是說,一個過濾器管道的輸出又能夠做爲下一個管道的輸入,如此下去。 下面的例子實現查找列表的第一個元素並將其轉化爲大寫。
{{ my_list|first|upper }}有些過濾器有參數。 過濾器的參數跟隨冒號以後而且老是以雙引號包含。 例如:
{{ bio|truncatewords:"30" }}這個將顯示變量 bio 的前30個詞。
addslashes : 添加反斜槓到任何反斜槓、單引號或者雙引號前面。 這在處理包含JavaScript的文本時是很是有用的。
date : 按指定的格式字符串參數格式化 date 或者 datetime 對象, 範例:
{{ pub_date|date:"F j, Y" }}length : 返回變量的長度。 對於列表,這個參數將返回列表元素的個數。 對於字符串,這個參數將返回字符串中字符的個數。 你能夠對列表或者字符串,或者任何知道怎麼測定長度的Python 對象使用這個方法(也就是說,有 __len__() 方法的對象)。
4.使用locals函數將視圖裏的參數傳遞到html文件中
def post(request): l=list() l.append('x') l.append('y') name='jeck' return render(request,'end.html',locals())
使用locals函數將post中的l,name傳遞到end.html中。