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

ola*_*ndo 2 django escaping widget

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

<form>
    {{ run_form.as_p }}
</form>
Run Code Online (Sandbox Code Playgroud)

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

{% for field in form %}
      <div class="fieldWrapper">
           {{ field.errors }}
           {{ field.label_tag }}: {{ field }}
      </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*man 5

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

可能,虽然因为你没有发布代码而无法分辨.

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

  • 谢谢,就是这样。只是为了向以后的读者说明一下:)-小部件的render()方法返回了未标记为mark_safe()的字符串,因此模板对其进行了转义。 (2认同)