flaskform传递变量(WTForms)

时间:2018-07-04 22:17:16

标签: python flask wtforms

我想传递一个str用作表单提示。我认为这很简单,但事实证明很难。

这是我的代码:

class PostForm(FlaskForm):
    post = TextAreaField(Question, validators=[DataRequired()])
    submit = SubmitField('Submit')`

然后

form = PostForm('my question')

相应的html

{{ wtf.quick_form(form) }}

2 个答案:

答案 0 :(得分:1)

今天,我发现了一个与您类似的问题。我想将变量传递给FlaskForm。对于一个小型的简历创建应用程序,我想给用户一个机会来为其工作经历创建多个条目,而我想使用FieldListFormField来完成。而且我需要以一种形式在一页上完成它。

我的解决方案是表单的工厂模式的非常简单的python实现:

class ConstructorForm(FlaskForm):
    ...
    work_experience_form = FieldList(FormField(WorkExperienceForm), min_entries=1, max_entries=1)
    skills_form = FieldList(FormField(SkillsForm), min_entries=1, max_entries=1)
    ...

这是我构建扩展表单的功能:

def constructor_form(work_experience_forms=1, skills_forms=1):
    class _ConstructorForm(ConstructorForm):
        pass

    _ConstructorForm.work_experience_form = FieldList(
        FormField(WorkExperienceForm), min_entries=work_experience_forms, max_entries=work_experience_forms
    )
    _ConstructorForm.skills_form = FieldList(
        FormField(SkillsForm), min_entries=skills_forms, max_entries=skills_forms
    )

    return _ConstructorForm()

答案 1 :(得分:0)

因此,我仍然没有这个问题的答案,但是我确实设法提出了一个解决方案。

class PostForm(FlaskForm):
    post = TextAreaField(_l('This no longer matters'), validators=[DataRequired()])
    submit = SubmitField(_l('Submit'))

然后在路线上

from wtforms.fields.core import Label
form = PostForm()
form.post.label = Label("post", 'Real question goes here')}

对此的解释是,TextAreaField在帖子上创建了一个可访问和可更改的标签属性,但需要正确地将其设置为wtforms.fields.core中的Label对象格式。 (仅将其重新分配为字符串是行不通的)。该对象的表示形式是:

<label for="post">Real question goes here</label>

它是类型

<class 'wtforms.fields.core.Label'>