2

我正在使用 Flask、WTForms 和 Backbone.js 来创建我的应用程序。我是第一次使用 Backbonejs。

我创建了一个 Backbone js 模板来显示数据及其相应的表单。

    <%= my_field1 %>
    <%= my_field2 %>
    <form>
        <input type="text" value="<%= my_field1 %>"/>
        <input type="text" value="<%= my_field2 %>"/>
    </form>

我正在使用 WTForms 和 Jinja2 来呈现我的表单。为了给出初始值,我正在这样做

    {{ field1(value="<%= my_field1 %>") | safe }}
    {{ field1(value="<%= my_field1 %>") | safe }}

这是问题的根源,因为 <% 在渲染时被转义。我怎样才能阻止 wtforms/jinja 逃避这个?

4

1 回答 1

1

我查看了 WTForms 的源代码,是的,它在渲染过程中转义了 HTML 字符,您可以通过调用该字段来执行此操作。所以神社的“安全”参数行动太晚了。

您可以通过创建自定义小部件来呈现您的字段来解决此问题:

http://wtforms.simplecodes.com/docs/0.6/widgets.html#custom-widgets

我为您编写了一个小部件 - 很抱歉我没有运行此代码,但这应该足以让您朝着正确的方向前进。

如果遇到麻烦,请务必查看 WTForms 的源代码:它的注释很好,内容不多,您可以从那里开始。(我做到了!)

from wtforms.widgets.core import HTMLString 

# Custom widget display 
def input_field_with_unescaped_value(field, **kwargs):

  value = kwargs.pop('value', field._value())
  unescaped_output = u' value="%s"' % value if value else ''

  return HTMLString(u'<input %s%s>%s</input>' % \
      (html_params(name=field.name, **kwargs), \
      unescaped_output, \
      unicode(field._value()))

# and here's how you use it in a form
class MyForm(Form):
  field1 = TextField(u'Thingy', widget=input_field_with_unescaped_value)
于 2012-11-14T02:52:46.787 回答