wtforms flask 的多个输出
Multiple outputs from wtforms flask
如何从一个 wtform 将多个输出打印在一页上?
所以我在 forms.py
上创建了一个表单
class PostForm(Form):
content = StringField("What's up?", validators=[DataRequired()])
company_name = StringField("Company's Name", validators=[DataRequired()])
job_type = SelectField('Job Type', choices=[('fulltime', 'Full Time'), ('parttime', 'Part Time'), ('contract', 'Contract'), ('internship', 'Internship')])
country = SelectField(
'Country', choices=[('BHR', 'Bahrain'), ('KWT', 'Kuwait'), ('OM', 'Oman'), ('QTR', 'Qatar'), ('SA', 'Saudi Arabia'), ('UAE', 'U.A.E')]
)
job_description = TextAreaField("Job description", validators=[DataRequired()])
responsibilities = TextAreaField("Responsibilities the future employee will have/do.", validators=[DataRequired()])
job_requierments = TextAreaField("Requirements that are needed for the job.", validators=[DataRequired()])
bonus = TextAreaField("Bonus/Extras that an employee can have which makes him a better candidate for the job.", validators=[DataRequired()])
perks = TextAreaField("Perks that the future employee can get by working with you", validators=[DataRequired()])
about_us = TextAreaField("Abous Us (About the employer/Company)", validators=[DataRequired()])
apply_now = TextAreaField("How to apply", validators=[DataRequired()])
email = StringField('Your email', validators=[DataRequired(), Email()])
mob_numb = StringField('Your phone number(s), and please only use numbers!', validators=[DataRequired()])
在我的 models.py 中,我得到了以下信息(请注意,我是在参加在线课程后这样做的,但我正在添加和编辑自己的东西,这就是为什么我不知道如何添加多个输出来自一种形式)
class Post(Model):
timestamp = DateTimeField(default=datetime.datetime.now)
user = ForeignKeyField(
rel_model=User,
related_name='posts'
)
content = TextField()
对于我的 html 文件,我输出的表单是
{% extends "layout.html" %}
{% block content %}
{% for post in stream %}
<h2><a href="{{ url_for('stream', username=post.user.content) }}"> {{ post.content }} </a></h2>
{% endfor %}
{% endblock %}
我正确打印了内容并且效果很好,但是当我尝试添加时
country_name = TextField() under content = TextField() in models 我得到一个错误:
peewee.OperationalError: no such column: t1.company_name
如果我转到 html 页面并写下
{{ form.country_name }}
我收到以下错误
jinja2.exceptions.UndefinedError: 'form' is undefined
如果我使用
post.country_name
没有任何显示。
有什么想法吗?
编辑:忘记为表格添加我的app.py
@app.route('/new_post', methods=('GET', 'POST'))
@login_required
def post():
form = forms.PostForm()
if form.validate_on_submit():
models.Post.create(user=g.user.id,
content=form.content.data.strip())
flash("Message posted! Thanks!", "success")
return redirect(url_for('index'))
return render_template('post.html', form=form)
peewee.OperationalError: no such column: t1.company_name
如果您在 models.py 中添加新字段,您还需要更新数据库 table。此错误表明模型(在 models.py 中)与数据库中的 table 不匹配。
and if I go to my html page and write
{{ form.country_name }}
I get the following error
jinja2.exceptions.UndefinedError: 'form' is undefined
在处理您的请求的视图中,您需要在 return 中指定一个表单。否则您将无法访问该表单。
def page():
myform = forms.MyForm()
return render_template('page.html', form=myform)
and if I use
post.country_name
nothing shows.
any ideas?
这很难说,因为在您粘贴的 html 中,您正试图遍历 "stream",这是您没有与 html 一起提交的内容您展示的 "post()" 方法。
下面的代码有望让您了解如何在网页中使用表单。
app.py
def page():
myform = MyForm()
return render_template('page.html', forminhtml=myform)
page.html
Content: {{ forminhtml.content }}
Company name: {{ forminhtml.company_name }}
如何从一个 wtform 将多个输出打印在一页上? 所以我在 forms.py
上创建了一个表单class PostForm(Form):
content = StringField("What's up?", validators=[DataRequired()])
company_name = StringField("Company's Name", validators=[DataRequired()])
job_type = SelectField('Job Type', choices=[('fulltime', 'Full Time'), ('parttime', 'Part Time'), ('contract', 'Contract'), ('internship', 'Internship')])
country = SelectField(
'Country', choices=[('BHR', 'Bahrain'), ('KWT', 'Kuwait'), ('OM', 'Oman'), ('QTR', 'Qatar'), ('SA', 'Saudi Arabia'), ('UAE', 'U.A.E')]
)
job_description = TextAreaField("Job description", validators=[DataRequired()])
responsibilities = TextAreaField("Responsibilities the future employee will have/do.", validators=[DataRequired()])
job_requierments = TextAreaField("Requirements that are needed for the job.", validators=[DataRequired()])
bonus = TextAreaField("Bonus/Extras that an employee can have which makes him a better candidate for the job.", validators=[DataRequired()])
perks = TextAreaField("Perks that the future employee can get by working with you", validators=[DataRequired()])
about_us = TextAreaField("Abous Us (About the employer/Company)", validators=[DataRequired()])
apply_now = TextAreaField("How to apply", validators=[DataRequired()])
email = StringField('Your email', validators=[DataRequired(), Email()])
mob_numb = StringField('Your phone number(s), and please only use numbers!', validators=[DataRequired()])
在我的 models.py 中,我得到了以下信息(请注意,我是在参加在线课程后这样做的,但我正在添加和编辑自己的东西,这就是为什么我不知道如何添加多个输出来自一种形式)
class Post(Model):
timestamp = DateTimeField(default=datetime.datetime.now)
user = ForeignKeyField(
rel_model=User,
related_name='posts'
)
content = TextField()
对于我的 html 文件,我输出的表单是
{% extends "layout.html" %}
{% block content %}
{% for post in stream %}
<h2><a href="{{ url_for('stream', username=post.user.content) }}"> {{ post.content }} </a></h2>
{% endfor %}
{% endblock %}
我正确打印了内容并且效果很好,但是当我尝试添加时 country_name = TextField() under content = TextField() in models 我得到一个错误:
peewee.OperationalError: no such column: t1.company_name
如果我转到 html 页面并写下
{{ form.country_name }}
我收到以下错误
jinja2.exceptions.UndefinedError: 'form' is undefined
如果我使用
post.country_name
没有任何显示。
有什么想法吗?
编辑:忘记为表格添加我的app.py
@app.route('/new_post', methods=('GET', 'POST'))
@login_required
def post():
form = forms.PostForm()
if form.validate_on_submit():
models.Post.create(user=g.user.id,
content=form.content.data.strip())
flash("Message posted! Thanks!", "success")
return redirect(url_for('index'))
return render_template('post.html', form=form)
peewee.OperationalError: no such column: t1.company_name
如果您在 models.py 中添加新字段,您还需要更新数据库 table。此错误表明模型(在 models.py 中)与数据库中的 table 不匹配。
and if I go to my html page and write
{{ form.country_name }}
I get the following error
jinja2.exceptions.UndefinedError: 'form' is undefined
在处理您的请求的视图中,您需要在 return 中指定一个表单。否则您将无法访问该表单。
def page():
myform = forms.MyForm()
return render_template('page.html', form=myform)
and if I use
post.country_name
nothing shows. any ideas?
这很难说,因为在您粘贴的 html 中,您正试图遍历 "stream",这是您没有与 html 一起提交的内容您展示的 "post()" 方法。
下面的代码有望让您了解如何在网页中使用表单。
app.py
def page():
myform = MyForm()
return render_template('page.html', forminhtml=myform)
page.html
Content: {{ forminhtml.content }}
Company name: {{ forminhtml.company_name }}