我正在使用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 }}
这是问题的根源,因为&lt;%在渲染时被转义。我怎样才能阻止wtforms / jinja逃脱呢?
答案 0 :(得分:1)
我查看了WTForms的源代码,是的,它将HTML字符转换为渲染的一部分,你通过调用字段来完成。所以jinja“安全”参数表现得太晚了。
您可以通过创建自定义小部件来渲染您的字段来解决这个问题:
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)