0

I want to pass a str to be used as the prompt for a form. I thought it would be simple but it is proving to be difficult.

Here is my code:

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

And,

form = PostForm('my question') 

the corresponding html

{{ wtf.quick_form(form) }} 
1

3 Answers 3

1

So, I still don't have an answer to the question, but I did manage to come up with a solution.

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

And then in the routes

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

The explanation for this is that TextAreaField creates a label attribute on post that is accessible and changable, but it needs to be formated correctly as a Label object from wtforms.fields.core. (Simply reassigning it as a string did not work). The representation of this object is:

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

And it is of type

<class 'wtforms.fields.core.Label'> 
Sign up to request clarification or add additional context in comments.

1 Comment

You can also do form.post.label.text = f'{<whatever>}'
1

Today I'm figured out about a similar problem as yours. I wanted to pass a variable to FlaskForm. For a small CV creation app, I want to give the user an opportunity to create more than 1 entry for his work experience and I wanted to do it with FieldList and FormField. And I needed to do it on one page so in one form.

My solution is pretty simple python implementation of factory pattern for forms:

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) ... 

And here is my function for building extending forms:

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() 

Comments

0

Try this:

def PostForm(question) class F(Flaskform): post = TextAreaField(question, validators=[DataRequired()]) submit = SubmitField('Submit') return F() 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.