首页 文章

在渲染字段时,包含包含骨干js模板的转义值参数

提问于
浏览
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逃脱呢?

1 回答

  • 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)
    

相关问题