Django模板語言 標籤整理
Django模板語言 標籤
內建標籤引用
1. autoescape
控制自動轉義是否可用. 這種標籤帶有任何 on
或 off
作為引數的話,他將決定轉義塊內效果。 該標籤會以一個endautoescape
作為結束標籤.
當自動轉義生效時,所有變數內容會被轉義成HTML輸出(在所有過濾器生效後) 這等同與手動將escape
篩選器應用於每個變數。
例項:
1)
<!-- index.html檔案 -->
<body>
<p>{{ text }}</p>
{% autoescape off %}
{{ text }}
{% endautoescape %}
</body>
如果: text = "<b>文字內容</b>"
頁面顯示結果:
<b>文字內容</b>
文字內容
2)
<!-- index.html檔案 -->
<body>
<p>{{ text }}</p>
{% autoescape off %}{{ text|escape }}
{% endautoescape %}
</body>
頁面顯示結果:
<b>文字內容</b>
<b>文字內容</b>
使用了escape過濾器, 則對text文字轉義
Django轉義預設是開啟的, 關閉轉義有兩種方式
(1) safe 一般作用於單行文字
(2) autoescape off 一般作用於塊級內容
例項:
1)
<body>
<p>{{ text }}</p>
{% autoescape on %}
{{ text }}
{% endautoescape %}
</body>
頁面顯示結果:
<b>文字內容</b>
<b>文字內容</b>
2)
<body>
<p>{{ text|safe }}</p>
{% autoescape off %}
{{ text }}
{{ text|escape }}
{% endautoescape %}
</body>
頁面顯示結果:
文字內容
文字內容
2. block
一般在父模板可以使用block標籤, 把變化的內容可以包裹在block標籤內; 子模板引用父模板後, 可以使用block標籤重寫內容, 覆蓋父模板中原來的內容.
例項:
<!-- 父模板html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>年度頁面</title>
</head>
<body>
<div>
<p>這是年度新聞</p>
</div>
{% block content %}
<p>頁面主體內容</p>
{% endblock content %}
</body>
</html>
<!-- 子模板一 html -->
{% extends 'show_year.html' %}
<!-- 子模板二 html -->
{% extends 'show_year.html' %}
{% block content %}
<p>子模板中內容</p>
{% endblock %}
子模板的顯示結果:
子模板一:
這是年度新聞
頁面主題內容
子模板二:
這是年度新聞
子模板中內容
3. comment
在 {% comment %}
和 {% endcomment %}
,之間的內容會被忽略,作為註釋。相當於多行註釋
示例:
{% comment %}
<b>粗體</b>
<div>
<p>這是Index頁面</p>
</div>
{% endcomment %}
這部分註釋的內容, 在伺服器端就直接忽略到了, 不會發送給客戶端.
4. csrf_token
這個標籤用於跨站請求偽造保護.
客戶端在提交表單到服務端時, 如果表單中不寫這個標籤, 服務端會直接返回403 Forbidden
的錯誤. 把這個標籤寫到表單中, 可以避免發生這個錯誤.
當把csrf_token寫到表單中後, 其實客戶端在提交資料時, 會提交一個name=csrfmiddlewaretoken
, value
為隨機的64位字元給服務端, 服務端收到後, 會根據這串字元校驗客戶端的合法性.(如果想看這個csrfmiddlewaretoken的具體內容,可以開啟瀏覽器的除錯控制檯; 你會看到一個屬性type='hidden'的input標籤, value
已經有預設值).
表單
<form action="" method="POST">
{% csrf_token %}
<input type="text" name="name" placeholder="姓名">
<button type="submit">提交</button>
</form>
5. cycle
每當這個標籤被訪問,則傳出一個它的可迭代引數的元素。 第一次訪問返回第一個元素,第二次訪問返回第二個引數,以此類推. 一旦所有的變數都被訪問過了,就會回到最開始的地方,重複下去
例項:
1) 這個標籤在迴圈中特別有用:
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
第一次迭代產生的HTML引用了
row1
類,第二次則是row2
類,第三次 又是row1
類,如此類推。2) 你也可以使用變數, 例如,如果你有兩個模版變數,
rowvalue1
和rowvalue2
, 你可以讓他們的值像這樣替換:{% for o in some_list %}
<tr class=