1

wtforms をいじった後、フィールドはウィジェットを使用して実際にそれらを html にレンダリングします。私は自分がやりたい方法でhtmlを描画するためのカスタムフィールド/ウィジェットをいくつか書きました。しかし、ここに質問があります:

定義済みの css クラスでそれらをレンダリングするか、実際の詳細を自分で提供したいとします。

どうすればこれを達成できますか?そして、リクエスト処理のどの段階で(Formクラス宣言時?または属性を設定してFormいくつかを与えるFieldsとき?または実際にjinja2テンプレートでそれらを呼び出すとき)、私はそれを行う必要がありますか?

4

2 に答える 2

3

次のような Jinja マクロを使用します。

{% macro field_with_errors(field) %}
    {% set css_class=kwargs.pop('class', '') %}
    {% if field.type in ('DateField', 'DateTimeField') %}
        {{ field(class='date ' + css_class, **kwargs) }}
    {% elif field.type == 'IntegerField' %}
        {{ field(class='number ' + css_class, **kwargs) }}
    {% else %}
        {{ field(class=css_class, **kwargs) }}
    {% endif %}

    {% if field.errors %}
        <ul class="errors">{% for error in field.errors %}<li>{{ error|e }}</li>{% endfor %}</ul>
    {% endif %}
{% endmacro %}

使用法は次のようなものです:

{{ field_with_errors(form.foo, placeholder='bar') }}

これにより、ボイラープレートを避けることができますが、表示の決定をテンプレート スペースに保持することもできます。

于 2013-02-07T07:04:32.923 に答える
2

レンダリング フィールドのセクションを見てください。

または、Jinja2 (など) テンプレートでレンダリングする属性を追加できます。

<div class="input-prepend">
        {{ form.address(placeholder="example.com", id="address", autofocus="autofocus", required="required") }}
</div>

address上記の ID 値に の代わりに変数を使用し、キーワード引数を使用してテンプレートをレンダリングして入力することを妨げるものは何もありません。

于 2013-02-06T16:14:32.650 に答える