django在渲染表单时转义小部件

时间:2011-02-10 11:28:28

标签: django escaping widget

我创建了一个自定义窗口小部件和一个使用它的窗体。 以前,我只是有一个简单的模板来显示我调试时的表单:

<form>
    {{ run_form.as_p }}
</form>

现在我想将每个表单字段括在div中,所以我已将模板更改为

{% for field in form %}
      <div class="fieldWrapper">
           {{ field.errors }}
           {{ field.label_tag }}: {{ field }}
      </div>
{% endfor %}

但现在看来,当我的字段被渲染时,它的所有字符都被html转义,所以现在当我查看它的源代码时,它看起来像&lt;input type=&quot;text&quot; id=&quot;id_scriptscrap&quot;/&gt它本来应该是 <input type="text" id="id_scriptscrap"/>

有什么我想念的吗?为什么第一个模板会在没有转义的情况下输出它,而第二个模板会逃脱?也许我在创建自定义窗口小部件类时做错了什么?

1 个答案:

答案 0 :(得分:5)

  

创建自定义窗口小部件类时,也许我做错了什么?

可能,因为你不发布代码,所以不可能告诉你。

form.as_p的工作原因是form._html_output()方法 - 这是各种as_foo方法使用的方法 - 在其输出上调用mark_safe。但是,每个内置窗口小部件类在自己的输出上调用mark_safe,这就是它们单独工作的原因。您可能只需要在自定义小部件上执行相同操作。