Python:WTForms我可以在初始化字段时添加占位符属性吗?

Kit*_* Ho 56 python wtforms

我想在WTForms中的字段上添加一个占位符属性.我该怎么做?

abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], placeholder="test")
Run Code Online (Sandbox Code Playgroud)

以上代码无效

如何添加具有值的占位符属性?

Cra*_*ast 108

针对WTForms 2.1进行了更新

您现在可以从WTForms 2.1(2015年12月)开始,通过使用render_kw=字段构造函数的参数来设置渲染关键字.

所以这个领域看起来像:

abc = StringField('abc', [InputRequired()], render_kw={"placeholder": "test"})
Run Code Online (Sandbox Code Playgroud)

注意虽然这是可能的; 它确实开始弥合代码和演示之间的界限; 所以明智地使用它!


(对于早于WTForms 2.1的版本,旧答案仍然适用)

placeholder 在WTforms 2.0.x及更低版本的Python构造函数中不支持.

但是,您可以在模板中轻松完成此操作:

{{ form.abc(placeholder="test") }}
Run Code Online (Sandbox Code Playgroud)

  • 占位符与标签相同.因此,它是内容而非风格.在模板中设置它使得无法拥有通用模板. (12认同)
  • WTForms字段的`description`关键字参数允许在字段构造中设置,并且不进行检查,只是直接复制到字段上,因此可以是任何值,而不仅仅是字符串,甚至是自定义属性.如果你想继承你自己的元数据,你可以简单地使用它来传递你想要的任何数据:`TextField(...,description = {'placeholder':foo','class':bar}`(或者甚至是自定义类)然后在模板中使用此属性来获取所需的任何特殊元数据. (12认同)
  • 要添加字段的标签,您可以写:`{{form.abc(placeholder = form.abc.label.text)}}` (3认同)
  • 你是对的,占位符应该是风格,不应该添加结构元素. (2认同)
  • 我正在投票给这个答案,我无法理解有人怎么认为占位符是一个显示设置.:D Plus解决方案并不适用于模板中不仅仅是硬编码形式的任何内容. (2认同)

Dra*_*els 7

正确答案如下:

abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], description="test")
Run Code Online (Sandbox Code Playgroud)

正如人们可以阅读的文件:

description – A description for the field, typically used for help text.
Run Code Online (Sandbox Code Playgroud)

然后在你的模板中:

{% import 'forms.html' as forms %}

{% for field in form %}
    {{ forms.render_field(field) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

render_field是forms.html中定义的宏:

{% macro render_field(field) -%}

{% if field.type == 'CSRFTokenField' %}
    {{ field }}

    {% if field.errors %}
        <div class="warning">You have submitted an invalid CSRF token</div>
    {% endif %}
{% elif field.type == 'HiddenField' %}
    {{ field }}
{# any other special case you may need #}
{% else %}
    <div class="form-group">
        <label for="{{ field.label.field_id }}" class="col-sm-2 control-label">{{ field.label.text }}</label>
        <div class="col-sm-10">
            {{ field(placeholder=field.description) }}
            {% if field.errors %}
                <div class="alert alert-danger" role="alert">
                {% for err in field.errors %}
                    <p>{{ err|e }}</p>
                {% endfor %}
                </div>
            {% endif %}
        </div>
    </div>
{% endif %}

{%- endmacro %}
Run Code Online (Sandbox Code Playgroud)


小智 6

{{ form.username(class="input", placeholder="Please enter your username") }} 
Run Code Online (Sandbox Code Playgroud)