backbone.js - 渲染字段时Wtforms转义包含自变量js模板的value参数

标签 backbone.js flask underscore.js jinja2 wtforms

我正在使用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转义?

最佳答案

我看了看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)

关于backbone.js - 渲染字段时Wtforms转义包含自变量js模板的value参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13323280/

相关文章:

javascript - 使用索引将模型添加到集合中

javascript - 在事件/回调驱动的 JavaScript 应用程序中管理 "this"

python - 如何在单个地方处理 flask 中的一般异常?

python - 使用 Flask-WTForms 字段描述渲染 html 标题属性

python - SQLAlchemy 告诉我 "AttributeError: type object ' User' 没有属性 'columns' "

javascript - 使用 lodash 按多个字段对数组中的项目进行排序

javascript - underscore js _grouby 浏览器差异

twitter-bootstrap - Bootstrap Backbone Marionette 模态

jquery - 如何在一个文件中存储多个html模板?

javascript - 用于 backbone.js 验证的自定义验证器