Django框架(25.Django中的模板繼承以及HTML轉義)

模板繼承

模板繼承和類的繼承含義是一樣的,主要是爲了提高代碼重用,減輕開發人員的工作量。

典型應用:網站的頭部、尾部信息。

父模板

如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。

  標籤block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 爲了更好的可讀性,建議給   endblock標籤寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的數據。

{%block 名稱%}
預留區域,可以編寫默認內容,也可以沒有默認內容
{%endblock  名稱%}

子模板

標籤extends:繼承,寫在子模板文件的第一行。

{% extends "父模板路徑"%}

子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的默認值。

填充父模板中指定名稱的預留區域。

{%block 名稱%}
實際填充內容
{{block.super}}用於獲取父模板中block的內容
{%endblock 名稱%}

 HTML轉義

模板對上下文傳遞的字符串進行輸出時,會對以下字符自動轉義。

小於號< 轉換爲 &lt;

大於號> 轉換爲 &gt;

單引號' 轉換爲 &#39;

雙引號" 轉換爲 &quot;

與符號& 轉換爲 &amp;

關閉轉義

過濾器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:'&lt;h1&gt;hello&lt;/h1&gt;' }}
</body>
</html>

   然後網頁上就展示出

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章