首页 > 解决方案 > Django 表单模板转义

问题描述

{% if form.subject.errors %}
    <ol>
    {% for error in form.subject.errors %}
        <li><strong>{{ error|escape }}</strong></li>
    {% endfor %}
    </ol>
{% endif %}

我从模板中获取了上面的代码,在“form”键下传入了一个表单但是,我以前从未遇到过|escape?是 | or 位运算符?

标签: pythondjango

解决方案


不,这是|escape模板过滤器 [Django-doc]。正如文档所指定的:

转义字符串的 HTML。具体来说,它进行了以下替换:

  1. <被转换为&lt;
  2. >被转换为&gt;
  3. '(单引号)转换为&#x27;
  4. "(双引号)转换为&quot;
  5. &被转换为&amp;

将转义应用于通常会对结果应用自动转义的变量只会导致完成一轮转义。因此即使在自动转义环境中使用此功能也是安全的。如果要应用多个转义通道,请使用force_escape过滤器。

它可能在一个{% autoscape off %}…{% endautoescape %}块 [Django-doc]中,因为默认情况下 Django 已经转义了这些项目。因此,它将确保如果变量是一个包含可解释为 html 的字符的字符串,则会对这些字符进行转义以防止这种情况发生。


推荐阅读