Django模板[HTML转义]

HTML转义

  • 模板对上下文传递的字符串进行输出时,会对以下字符自动转义。
  • 小于号< 转换为 &lt;
  • 大于号> 转换为 &gt;
  • 单引号' 转换为 &#39;
  • 双引号" 转换为 &quot;
  • 与符号& 转换为 &amp;


示例

1)打开booktest/views.py文件,创建视图html_escape。
def html_escape(request):
   context={'content':'<h1>hello world</h1>'}
   return render(request,'booktest/html_escape.html',context)
2)打开booktest/urls.py文件,配置url。
url(r'^html_escape/$', views.html_escape),
3)在templates/booktest/目录下创建html_escape.html。
<html>
<head>
    <title>转义</title>
</head>
<body>
    自动转义:{{content}}
</body>
</html>
4)运行服务器,在浏览器中输入如下网址。

http: //127.0.0.1:8000/html_escape/

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


关闭转义

  • 过滤器escape可以实现对变量的html转义,默认模板就会转义,一般省略。
    {{t1|escape}}
  • 过滤器safe:禁用转义,告诉模板这个变量是安全的,可以解释执行。
    {{data|safe}}

1)修改templates/booktest/html_escape.html代码如下。

<html>
<head>
    <title>转义</title>
</head>
<body>
    自动转义:{{content}}
<hr>
    过滤器safe关闭转义:{{content|safe}}
</body>
</html>


标签autoescape:

设置一段代码都禁用转义,接受on、off参数。

{%autoescape off%}
...
{%endautoescape%}

1)修改templates/booktest/html_escape.html代码如下。

字符串字面值对于在模板中硬编码的html字符串,不会转义。

1)修改templates/booktest/html_escape.html代码如下:
<html>
<head>
    <title>转义</title>
</head>
<body>
自动转义:{{content}}
<hr>
过滤器safe关闭转义:{{content|safe}}
<hr>
标签autoescape关闭转义:
{%autoescape off%}
    {{content}}
{%endautoescape%}
<hr>
模板硬编码不转义:{{data|default:'<b>hello</b>'}}
<hr>
模板硬编码手动转义:{{data|default:"&lt;b&gt;123&lt;/b&gt;"}}
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML转义 模板对上下文传递的字符串进行输出时,会将以下字符进行转义 所谓html转义就是将 html关键字(包...
    IT的咸鱼阅读 1,048评论 0 0
  • 声明:转载请注明出处http://www.jianshu.com/p/1664dcfd840c 最近在折腾Djan...
    蛇发女妖阅读 6,319评论 1 10
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,101评论 0 8
  • 介绍 Jinja是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker...
    ZhouLang阅读 7,988评论 0 2
  • 模板 模板就是一个简单的文本文件,它可以生成任何文本格式(HTML,XML,CSV等)。 模板中包含变量和标签,当...
    Zoulf阅读 588评论 0 0