2012-11-10 24 views
2

我正在使用Flask,WTForms和Backbone.js來創建我的應用程序。我正在與Backbonejs第一次合作。平臺轉義字段值包含骨幹js模板的轉義值參數

我創建了一個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

我看了一下WTForms的源代碼,是的,它將HTML字符作爲渲染的一部分進行轉義,這是通過調用字段來完成的。因此,忍者「安全」參數行事得太遲。

讓您可以通過創建一個自定義的widget來渲染現場:

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) 
+1

感謝您編寫小部件! :) – codecool