美文网首页
2.9 jinja2 模板转义

2.9 jinja2 模板转义

作者: yungege | 来源:发表于2019-08-19 11:43 被阅读0次

    转义

    转义的概念是,在模板渲染字符串的时候,字符串有可能包括一些非常危险的字符比如<>等,这些字符会破坏掉原来HTML标签的结构,更严重的可能会发生XSS跨域脚本攻击,因此如果碰到<>这些字符的时候,应该转义成HTML能正确表示这些字符的写法,比如>HTML中应该用&lt;来表示等。

    但是Flask中默认没有开启全局自动转义,针对那些以.html.htm.xml.xhtml结尾的文件,如果采用render_template函数进行渲染的,则会开启自动转义。并且当用render_template_string函数的时候,会将所有的字符串进行转义后再渲染。而对于Jinja2默认没有开启全局自动转义,作者有自己的原因:

    1. 渲染到模板中的字符串并不是所有都是危险的,大部分还是没有问题的,如果开启自动转义,那么将会带来大量的不必要的开销。
    2. Jinja2很难获取当前的字符串是否已经被转义过了,因此如果开启自动转义,将对一些已经被转义过的字符串发生二次转义,在渲染后会破坏原来的字符串。

    在没有开启自动转义的模式下(比如以.conf结尾的文件),对于一些不信任的字符串,可以通过{{ content_html|e }}或者是{{ content_html|escape }}的方式进行转义。在开启了自动转义的模式下,如果想关闭自动转义,可以通过{{ content_html|safe }}的方式关闭自动转义。而{%autoescape true/false%}...{%endautoescape%}可以将一段代码块放在中间,来关闭或开启自动转义,例如以下代码关闭了自动转义:

    {% autoescape false %}
      <p>autoescaping is disabled here
      <p>{{ will_not_be_escaped }}
    {% endautoescape %}
    

    数据类型和运算符

    数据类型:

    Jinja支持许多数据类型,包括:字符串、整型、浮点型、列表、元组、字典、True/False

    运算符:

    • +号运算符:可以完成数字相加,字符串相加,列表相加。但是并不推荐使用+运算符来操作字符串,字符串相加应该使用~运算符。
    • -号运算符:只能针对两个数字相减。
    • /号运算符:对两个数进行相除。
    • %号运算符:取余运算。
    • *号运算符:乘号运算符,并且可以对字符进行相乘。
    • **号运算符:次幂运算符,比如2**3=8。
    • in操作符:跟python中的in一样使用,比如true返回true
    • ~号运算符:拼接多个字符串,比如HelloWorld将返回HelloWorld

    相关文章

      网友评论

          本文标题:2.9 jinja2 模板转义

          本文链接:https://www.haomeiwen.com/subject/zglssctx.html