Django官方文档笔记-模板系统-自动转义

自动转义的产生背景

当对模板变量进行替换时,替换字符串中可能含有能产生非预期影响的元素。
例如"<script>alert('hellp')</script>"将弹出警告框
用户利用这个特点做一些不可描述的事情 —— 跨域脚本(XSS)攻击


自动转义的详细操作

为了防止这种情况出现,django引入自动转义机制,默认开启。
以下5 个字符尤其重要:

  • <自动转为&lt
  • >自动转为&gt
  • '自动转为&#39
  • "自动转为&quot
  • &自动转为&amp

手动关闭自动转义

有时候我们确实是希望模板变量被替换成一段HTML代码

来自用户的数据将进行自动转义

  1. 使用safe过滤器关闭单个模板变量的自动转义功能
1
{{ data | safe}}
  1. 控制模板块的自动转义
1
2
3
{% autoescape off %}
...
{% endautoescape %}
  1. 是否自动转义可根据模板间的继承进行转移

default过滤器的参数(字符串)的自动转义

因为这个常亮字符串是由模板作者定义的,默认已经通过了safe过滤器。
所以模板作者需要人工转义:定义

1
{{ data|default:"3 &lt; 2" }}

而不是

1
{{ data|default:"3 < 2" }}
----- For reprint please indicate the source -----
0%