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>

没有什么可以阻止您为上面的 ID 值使用变量,而不是address,然后使用关键字参数呈现模板以填充它。

于 2013-02-06T16:14:32.650 回答