我什么时候应该在Django的模板系统中使用escape和safe?

TIM*_*MEX 10 python django templates escaping

如果我有一个人们发表评论的方框,然后我会显示这样的评论......我应该逃脱吗?

{{ c.title }}
Run Code Online (Sandbox Code Playgroud)

Evg*_*eny 18

实际上,这取决于.Django的模板引擎会自动转义,所以你真的不需要逃避.

如果你像那样添加模板过滤器"safe",{{c.title|safe}}你需要担心像html注入这样的事情,因为"safe"标记了字符串,这意味着它不会被转义.

还有{%autoescape on%} ... {%endautoescape%}模板标记,如果需要,可以将"on"更改为"off".默认情况下它处于打开状态,不需要标记.

其他模板引擎默认情况下可能无法转义,Jinja2就是其中之一.

  • 您始终可以使用以下命令控制自动转义:{%autoescape on%} {{body}} {%endautoescape%}此处可以使用转义过滤器有选择地转义 (2认同)

Fli*_*imm 7

HTML自动转义默认情况下处于启用状态,因此在大多数情况下您不需要手动转义,但不是全部!

将变量的内容转储到HTML元素中是很好的:

<p>{{ variable }}</p>
Run Code Online (Sandbox Code Playgroud)

Django会自动跳脱的人物<,>,&,"',这是这里需要什么.

将变量转储到属性中也是可以的,因为"并且'都被转义,但请确保记住包含引号,因为空格不会被转义:

<span class="{{ variable }}">...</span> <!-- Good -->
<span class={{ variable }}>...</span>   <!-- Bad -->
Run Code Online (Sandbox Code Playgroud)

如果要在内联Javascript中使用字符串,则必须使用escapejs过滤器,并且不要忘记引号.这可以防止从Javascript变量的引号中转出,并<script>使用</script>以下命令转义出标记:

<script>
   var value = "{{ variable|escapejs }}";
</script>
Run Code Online (Sandbox Code Playgroud)

  • 啊啊啊啊。`escapejs` 是我要找的那个。我在任何地方都找不到这个 (2认同)