django在呈现表单时转义小部件
我创建了一个自定义小部件和一个使用它的表单。 以前,在调试表单时,我只有一个简单的模板来显示表单:django在呈现表单时转义小部件,django,escaping,widget,Django,Escaping,Widget,我创建了一个自定义小部件和一个使用它的表单。 以前,在调试表单时,我只有一个简单的模板来显示表单: <form> {{ run_form.as_p }} </form> {{run_form.as_p}} 现在,我想将每个表单字段括在一个div中,因此我将模板更改为 {% for field in form %} <div class="fieldWrapper"> {{ field.errors }}
<form>
{{ run_form.as_p }}
</form>
{{run_form.as_p}}
现在,我想将每个表单字段括在一个div中,因此我将模板更改为
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
{%用于表单%]中的字段
{{field.errors}}
{{field.label_tag}}:{{{field}
{%endfor%}
但现在看起来,当我的字段被呈现时,它的所有字符都是html转义的,所以现在当我查看它的源代码时,它看起来像是input type=“text”id=“id\u scriptscrap”/>
它应该在哪里
有什么我遗漏的吗?为什么第一个模板不转义就输出它,而第二个模板转义呢?也许我在创建自定义小部件类时做错了什么
也许我在创建自定义小部件类时做错了什么
可能吧,虽然因为你没有发布代码,所以不可能知道
form.as\p
工作的原因是form.\u html\u output()
方法-这是各种as\u foo
方法使用的-在其输出上调用mark\u safe
。然而,每个内置的小部件类也在它们自己的输出上调用mark_safe
,这就是它们各自工作的原因。您可能只需要在自定义小部件上执行相同的操作。替代原因:如果您意外地使用小部件而不是字段(例如password=forms.PasswordInput
而不是password=forms.CharField(小部件=forms.PasswordInput)定义表单,也会发生这种情况
谢谢,就是这样。为了向未来的读者澄清:)-小部件的render()方法返回了一个没有标记为mark_safe()的字符串,因此模板将其转义。