Jinja 2 - Django 表单:渲染编码 HTML

9 投票
1 回答
5635 浏览
提问于 2025-04-17 02:16

我在一个Django项目中测试Jinja2,发现输出有点奇怪。

当我渲染表单时,有些字符被转成了HTML编码,比如< >之类的。

在模板中:

{{ form.as_p() }}

它在浏览器中显示为:

<p><label for="id_username">Utilisateur:</label> <input autocomplete="off" id="id_username" type="text" name="username" maxlength="100" /></p> <p><label for="id_password">Mot de passe:</label> <input autocomplete="off" type="password" name="password" id="id_password" /></p>

查看源代码:

&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;id_username&amp;quot;&amp;gt;Utilisateur:&amp;lt;/label&amp;gt; &amp;lt;input autocomplete=&amp;quot;off&amp;quot; id=&amp;quot;id_username&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; maxlength=&amp;quot;100&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;id_password&amp;quot;&amp;gt;Mot de passe:&amp;lt;/label&amp;gt; &amp;lt;input autocomplete=&amp;quot;off&amp;quot; type=&amp;quot;password&amp;quot; name=&amp;quot;password&amp;quot; id=&amp;quot;id_password&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;

有没有人知道这是怎么回事?

1 个回答

27

Jinja2为了安全,会对数据进行HTML转义。所以你需要使用|safe 过滤器

虽然我没有在Django中使用过Jinja2,但我相信这样做应该是可行的:

{{ form.as_p()|safe }}

撰写回答