HTML轉義
- 模板對上下文傳遞的字符串進行輸出時,會對以下字符自動轉義
小於號< 轉換為<
大於號> 轉換為>
單引號' 轉換為'
雙引號" 轉換為 "
與符號& 轉換為 &
示例
- 打開booktest/views.py文件,創建視圖zhuanyi
def zhuanyi(request):
context={'content':'<h1>hello world</h1>'}
return render(request,'booktest/zhuanyi.html',context)
- 打開booktest/urls.py文件,配置url
url(r'^zhuanyi/$', views.zhuanyi),
- 在templates/booktest/目錄下創建zhuanyi.html
<html>
<head>
<title>轉義</title>
</head>
<body>
自動轉義:{{content}}
</body>
</html>
- 運行服務器,在瀏覽器中輸入如下網址
http://127.0.0.1:8000/zhuanyi/
- 轉義后標記代碼不會被直接解釋執行,而是被直接呈現,防止客戶端通過嵌入js代碼攻擊網站
- 瀏覽效果如下圖

關閉轉義
- 過濾器escape可以實現對變量的html轉義,默認模板就會轉義,一般省略
{{t1|escape}}
- 過濾器safe:禁用轉義,告訴模板這個變量是安全的,可以解釋執行
{{data|safe}}
- 修改templates/booktest/zhuanyi.html代碼如下
<html>
<head>
<title>轉義</title>
</head>
<body>
自動轉義:{{content}}
<hr>
過濾器safe關閉轉義:{{content|safe}}
</body>
</html>
- 刷新瀏覽器后效果如下圖

- 標簽autoescape:設置一段代碼都禁用轉義,接受on、off參數
{%autoescape off%}
...
{%endautoescape%}
- 修改templates/booktest/zhuanyi.html代碼如下
<html>
<head>
<title>轉義</title>
</head>
<body>
自動轉義:{{content}}
<hr>
過濾器safe關閉轉義:{{content|safe}}
<hr>
標簽autoescape關閉轉義:
{%autoescape off%}
{{content}}
{%endautoescape%}
</body>
</html>
- 刷新瀏覽器后效果如下圖

字符串字面值
- 對於在模板中硬編碼的html字符串,不會轉義
- 修改templates/booktest/zhuanyi.html代碼如下
<html>
<head>
<title>轉義</title>
</head>
<body>
自動轉義:{{content}}
<hr>
過濾器safe關閉轉義:{{content|safe}}
<hr>
標簽autoescape關閉轉義:
{%autoescape off%}
{{content}}
{%endautoescape%}
<hr>
模板硬編碼不轉義:{{data|default:'<b>hello</b>'}}
</body>
</html>
- 刷新瀏覽器后效果如下圖

-
如果希望出現轉義的效果,則需要手動編碼轉義
-
修改templates/booktest/zhuanyi.html代碼如下
<html>
<head>
<title>轉義</title>
</head>
<body>
自動轉義:{{content}}
<hr>
過濾器safe關閉轉義:{{content|safe}}
<hr>
標簽autoescape關閉轉義:
{%autoescape off%}
{{content}}
{%endautoescape%}
<hr>
模板硬編碼不轉義:{{data|default:'<b>hello</b>'}}
<hr>
模板硬編碼手動轉義:{{data|default:"<b>123</b>"}}
</body>
</html>
- 刷新瀏覽器后效果如下圖

