Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django在呈现表单时转义小部件_Django_Escaping_Widget - Fatal编程技术网

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()的字符串,因此模板将其转义。