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 文字をエスケープしています。そのため、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)
于 2012-11-14T02:52:46.787 に答える