2012-08-16 21 views
5

Flask-WFT documentation pageに表示されたrender_fieldマクロを使用して、異なるテンプレート間で長いフォームのフィールドを描画しています。フォームでFlask-WTFormsでhtmlタイトル属性を表示するフィールドの説明

フィールドがこの

year_built = IntegerField(label='Year Built', 
      description='Year built, not the year of a major renovation.', 
      validators=[validators.NumberRange(
            min=1700, 
            max=2012, 
            message="Between %(min)s and %(max)s")]) 

ように定義されたマクロは次のようになります...

{% macro render_field(field) %} 
    <dt>{{ field.label }} 
    <dd>{{ field(**kwargs)|safe }} 
    {% if field.errors %} 
    <ul class=errors> 
    {% for error in field.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 
    </dd> 
{% endmacro %} 

自身の個々のフィールドを使用して配置されている...

{{ render_field(form.year_built, class="input text")}} 

私が理解できないことは、マクロの一部の中のフィールドオブジェクトの説明を使用する方法ですatはHTMLフィールドfield(**kwargs)を作成します。私はrender_field関数にキーワードを渡すことができることを知っていますが、私は100以上のフィールドを持つフォームを扱い、forms.pyの記述を設定し、template.htmlのタイトルキーワードとして再度設定することは不必要な補充のようです。私は本当にそれがある場合はタイトルとして説明を表示するマクロを使用するか、タイトルがない場合はフィールドを表示するだけです。

field()関数を実行する前にkwargsに新しいエントリを追加する方法はありますか?

答えて

8

だから、私は...

{% macro render_field(field) %} 
    <dt>{{ field.label }} 
    <dd>{{ field(title=field.description, **kwargs)|safe }} 
    {% if field.errors %} 
    <ul class=errors> 
    {% for error in field.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 
    </dd> 
{% endmacro %} 
+0

を考えていたよりもはるかに簡単だった私のああ...私は(そのフィールドを実現していない)テンプレート内では、あなたのforms.py内部Fieldクラスよりも異なっています。言い換えると、 'dataforajax'(field(dataforajax = 'test'))のような属性をいくつか追加してhtmlに置きます。しかし、私は 'data-for-ajax'を追加するのに問題があります。ダッシュを配置するためにJavaScriptの属性を編集する必要があるかもしれません。 – Dexter