https://tieba.baidu.com/p/4708382929?red_tag=0827089032
在django中扁位,帶有HTML標簽的字符串渠退,如str = "aa a",我們通過template展示在html頁面中時设预,django會自動轉義為可顯示的html字符串徙歼,即將html標簽的尖括號等字符轉義。
如字符串中的空格會顯示為? 鳖枕,尖括號會顯示為 <魄梯、 >等等。
當我們不需要此自動轉換宾符,如上述str在html頁面直接顯示為aa a時酿秸,可通過多種方法禁止django進行自動轉義。
1. 對于單個變量魏烫,可以在其后面加上safe過濾器辣苏,告訴Django這個字符串不用進行HTML轉義。比如:
This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}
2.對于一段模板內容可以使用autoescape標簽哄褒,比如:
{% autoescape off %}
Hello {{ name }}
{% endautoescape %}
這里的off 參數表明被autoescape包含的信息都不需要執(zhí)行HTML轉義稀蟋。on 參數表示需要執(zhí)行HTML轉義,比如有的時候你希望一段信息中大部分不需要HTML轉義呐赡,但是其中某個部分需要HTML轉義退客,可以這樣:
{% autoescape off %}
This will not be auto-escaped: {{ data }}.
Nor this: {{ other_data }}
{% autoescape on %}
Auto-escaping applies again: {{ name }}
{% endautoescape %}
{% endautoescape %}
另外需要注意的一點是autoescape是存在繼承性的,比如你在父模板中有一個autoescape標簽并且參數為off,那么繼承它的子模板也會在相應的部分繼承這一特性萌狂。比如:
# base.html
{% autoescape off %}
{% block title %}{% endblock %}
{% block content %}
{% endblock %}
{% endautoescape %}
# child.html
{% extends "base.html" %}
{% block title %}This & that{% endblock %}
{% block content %}{{ greeting }}{% endblock %}
最后要提一下 字符串的default過濾器档玻,比如下面這個例子:
{{ data|default:"This is a string literal." }}
如果你在default:后面的缺省值中包含了HTML特殊字符,那么是不會被轉義的茫藏,比如你應該按照下面第一種的方式來寫误趴,而不是第二種:
# 正確的寫法
{{ data|default:"3 < 2" }}
# 錯誤的寫法
{{ data|default:"3 < 2" }}