Django 对字符串进行自动 HTML 转义,如在模板中输出如下值:
视图代码:
def index(request):
return render(request, 'temtest/index2.html',
{
't1': '<h1>hello</h1>'
})
模板代码:
{{t1}}
显示效果如下图:
<h1>hello</h1>
会被自动转义的字符
html 转义,就是将包含的 html 标签输出,而不被解释执行
原因是当显示用户提交字符串时,可能包含一些攻击性的代码,如 js 脚本
Django 会将如下字符自动转义:
< 会转换为<
> 会转换为>
' (单引号) 会转换为'
" (双引号)会转换为 "
& 会转换为 &
当显示不被信任的变量时使用 escape 过滤器,一般省略,因为 Django 自动转义
{{t1|escape}}
关闭转义
对于变量使用 safe 过滤器
{{ data|safe }}
对于代码块使用 autoescape 标签
{ % autoescape off %}
{{ body }}
{ % endautoescape %}
标签 autoescape 接受 on 或者 off 参数
自动转义标签在 base 模板中关闭,在 child 模板中也是关闭的
字符串字面值
手动转义
{ { data|default:"<b>123</b>" }}
应写为
{ { data|default:"<b>123</b>" }}
网友评论