# HTML轉義
* Django對字符串進行自動HTML轉義,如模板中輸出如下值:
```text
views.py
"""
def temp(request):
context = {'value':'<h1>hello world</h1>'}
return render(request,'myapp/htmltest.html',)
"""
模板test.html
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ value }}
</body>
</html>
"""
```
* 結果:

## 會被自動轉義的字符
* html轉義,就是將包含的html標簽輸出,而不被解釋執行,原因是當顯示用戶提交字符串時,可能包含一些攻擊性的代碼,如js腳本
* Django會將如下字符自動轉義:
```text
< 會轉換為<
> 會轉換為>
' (單引號) 會轉換為'
" (雙引號)會轉換為 "
& 會轉換為 &
```
* 當顯示不被信任的變量時使用escape過濾器,一般省略,因為Django自動轉義
```text
{{value|escape}}
```
## 關閉轉義
* 對于變量使用safe過濾器
```text
{{value|safe}}
```
* 對于代碼塊使用autoescape標簽
```text
{% atuoescape off%}
{{Body}}
{% endautoescape%}
```
* 標簽autoescape接收on或off參數
* 自動轉義標簽在base模板中關閉,在child模板中也是關閉的
## 字符串字面值
* 手動轉義
```text
{{ angle|default:"<b>abc</b" }}<br />
```
* 應該寫為
```text
{{ angle|default:"<b>abc</b>" }}<br />
```