flask html转义,Jinja2与Flask的HTML自动转义

今天写一个页面的时候发现代码竟然原封不动的出现了,怀疑是Jinja的自动转义。结果发现Jinja2的Escaping是自动关闭的,下面是Jinja官方文档中描述的,默认自动转义是关闭的,可以手动转义或者开启自动转义。

HTML Escaping

When generating HTML from templates, there’s always a risk that a

variable will include characters that affect the resulting HTML. There

are two approaches: manually escaping each variable or automatically

escaping everything by default.

Jinja supports both, but what is used depends on the application

configuration. The default configuaration is no automatic escaping for

various reasons:

escaping everything except of safe values will also mean that Jinja is

escaping variables known to not include HTML such as numbers which is

a huge performance hit. The information about the safety of a variable

is very fragile. It could happen that by coercing safe and unsafe

values the return value is double escaped HTML.

转而搜索发现是Flask的原因,Flask的自动转义是默认开启的,如需要关闭需要以下操作(来自官方文档):

自动转义就是自动帮你将特殊的字符替换成转义符号。HTML(或者XML, XHTML)的特殊字符有 &, >,

但是有时候你需要在模版中禁用自动转义。如果你想直接将HTML插入页面,比如将markdown语言转换成HTML,那么你就需要这样做了。

有3种方法可以关闭自动转义:

在Python文件中进行转义。先在 :class:~flask.Markup 对象中进行转义,然后将它传送给模版。一般推荐使用这个方式。

在模版文件中进行转义。通过 |safe 过滤器来表示字符串是安全的,如{{ 变量名 | safe }}

暂时禁用全局的自动转义功能。

要想在模版中禁用全局自动转义功能,可以用 语句块:

{\% codeblock lang:python \%}

{\% autoescaping false \%}

autoescaping is disableed here

{\% endautoescape \%}

{\% endcodeblock \%}

在这么做的时候,要语句块中使用到的变量非常小心。

自动开始转义也是不错的,这方面的安全就可以少考虑了,关闭也很简单。我直接使用第二种方式,在需要禁止转义的部分加上safe标记,很方便。其他的两种目前还没用上~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值