在摆弄wtforms之后,字段使用小部件将它们实际呈现为html。我写了一些自定义字段/小部件以我更喜欢的方式绘制html。但这是一个问题:
假设我想用预定义的css类渲染它们或者自己给出实际的细节。
我怎样才能做到这一点?以及处理请求的哪个阶段(在Form
类声明?或设置属性以给Form
一些Fields
?或当我实际上在jinja2模板中调用它们时我应该做是什么?
答案 0 :(得分: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') }}
这让我可以避免使用样板,但也可以让我在模板空间中保留显示决策。
答案 1 :(得分:2)
查看rendering fields部分。
或者,您可以添加要在Jinja2(等)模板中呈现的属性:
<div class="input-prepend">
{{ form.address(placeholder="example.com", id="address", autofocus="autofocus", required="required") }}
</div>
没有什么可以阻止您使用变量作为上面的ID值,而不是address
,然后使用关键字参数渲染模板来填充它。