模板繼承
模板繼承和類的繼承含義是一樣的,主要是爲了提高代碼重用,減輕開發人員的工作量。
典型應用:網站的頭部、尾部信息。
父模板
如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。
標籤block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 爲了更好的可讀性,建議給 endblock標籤寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的數據。
{%block 名稱%} 預留區域,可以編寫默認內容,也可以沒有默認內容 {%endblock 名稱%}
子模板
標籤extends:繼承,寫在子模板文件的第一行。
{% extends "父模板路徑"%}
子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的默認值。
填充父模板中指定名稱的預留區域。
{%block 名稱%} 實際填充內容 {{block.super}}用於獲取父模板中block的內容 {%endblock 名稱%}
HTML轉義
模板對上下文傳遞的字符串進行輸出時,會對以下字符自動轉義。
小於號< 轉換爲 < 大於號> 轉換爲 > 單引號' 轉換爲 ' 雙引號" 轉換爲 " 與符號& 轉換爲 &
關閉轉義
過濾器escape可以實現對變量的html轉義,默認模板就會轉義,一般省略。
{{t1|escape}}
過濾器safe:禁用轉義,告訴模板這個變量是安全的,可以解釋執行。
{{data|safe}}
標籤autoescape:設置一段代碼都禁用轉義,接受on、off參數。
{%autoescape off%} ... {%endautoescape%}
例如: 給頁面傳遞一個 {'content': '<h1>hello</h1>'}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模板轉義</title> </head> <body> html 轉義: <br/> 默認沒有關閉轉義 : {{ content }} <br/> 使用safe過濾器關閉轉義:{{ content|safe }} <br/> 使用autoescape關閉轉義: {% autoescape off %} {{ content }} {% endautoescape %} <br/> 模板的硬編碼,默認不會經過轉義: {{ test|default:'<h2>hello<h2/>' }} <br/> 手動進行轉義 {{ test|default:'<h1>hello</h1>' }} </body> </html>
然後網頁上就展示出