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>
- 刷新瀏覽器后效果如下圖