2012-11-10 1 views
2

Flask, WTForms 및 Backbone.js를 사용하여 앱을 만듭니다. 나는 Backbonejs와 처음으로 일하고있다.필드를 렌더링하는 동안 백본 js 템플릿을 포함하는 값 인수를 이스케이프 처리합니다.

데이터 및 해당 양식을 표시하는 백본 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 문자를 이스케이프 처리합니다. 그래서 진자 "안전"매개 변수가 너무 늦게 행동하고 있습니다.

당신은 당신의 분야 렌더링하는 사용자 정의 위젯을 만들어이 문제를 해결 얻을 수 있습니다 :

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