HTML转义

  • 在视图中,通过调用模板传递上下文,模板对上下文传递的字符串进行输出时,会对以下字符自动转义

    • HTML转义作用:转义后标记代码不会被直接解释执行,而是被直接呈现,防止客户端通过嵌入js代码攻击网站

      小于号 < 转换为 &lt;
      
      大于号 > 转换为 &gt;
      
      单引号 ' 转换为 &#39;
      
      双引号 " 转换为 &quot;
      
      与符号 & 转换为 &amp;
      

HTML转义演练

  • 正则匹配urls

     # HTML转义
     url(r'^zhuanyi/$', views.zhuanyi),
    
  • 视图

      # HTML转义
      def zhuanyi(request):
          context = {'text': '<h1>我是最大的标题标签</h1>'}
          # 调用模板传入HTML字符串
          return render(request, 'Book/zhuanyi.html', context)
    
  • 模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML转义</title>
</head>
<body>

{#默认会进行HTML转义#}
{{ text }}

</body>
</html>
  • HTML转义浏览效果

    • 出现了HTML转义的情况

    • 查看转义后网页源码

禁止HTML转义

  • 过滤器escape可以实现对变量的HTML转义,默认模板就会转义,一般省略

    • {{ 变量|escape }}
  • 过滤器safe:禁用转义,告诉模板这个变量是安全的,可以解释执行

    • {{ 变量|safe }}
  • 标签autoescape:设置一段代码都禁用转义,接受on、off参数

    • on:启用转义
    • off:禁用转义

  • 禁止HTML转义代码演练

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML转义</title>
</head>
<body>

{#默认会进行HTML转义#}
{{ text }}

{#禁用HTML转义#}
{{ text|safe }}

</body>
</html>
  • 禁用HTML转义浏览效果

其他

  • 1.对于在模板中硬编码 < > ' " & 不会被转义
  • 2.在模板中硬编码如果希望出现转义的效果,则需要手动编码转义