我正在尝试为选择字段设置默认值,该选择字段是使用html页面中的jinja使用for循环动态生成的选择字段,我无法在文档中找到解决方案。基本上,我需要一种方法,如果可能的话,使用jinja设置selectfield的默认值。
我无法在python的路由侧或表单侧设置默认值,因为这些字段是动态生成的,并且默认值需要根据选择而有所不同。如果我使用字符串字段而不使用选择字段,则可以设置默认值。
有人可以帮我找到解决此问题的方法吗?我可以切换到其他表单域而不是选择域吗?
第二个问题是,如果我将id和name设置为生成html页面时的样子,那么我提交并提交时仍可以与其他wtform字段一起使用的html手动字段吗?如果可能的话,我也许可以用这种方式解决我的问题。
有关如何将字符串字段转换为selectfield的代码:
{% for d in data %}
{{ form.type.label(class="label") }}
{{ form.type(class="field", value=d.type) }}
{% endfor %}
谢谢
答案 0 :(得分:1)
关于使用WTForms和Jinja2设置动态数据来设置SelectField的默认值,您可以使用以下示例:
首先,在表单中定义SelectField。
class MyForm(FlaskForm):
country_id = SelectField("Country", coerce=int) #[('1','USA'),..])
然后查询数据库以构建可用值列表。
@app.route("/...")
def country():
form = MyForm()
available_countries=db.session.query(Country).all()
countries_list=[(i.id, i.name) for i in available_countries]
form.country_id.choices = countries_list
最后在html中,使用process_data定义所选值。 注意:不使用z变量。
{% set z = form.country_id.process_data(countryNameVariable) %}
{{ form.country_id(class="")}}
答案 1 :(得分:0)
这是我想到的唯一方法
您可以在views.py
@app.route('/')
def index():
data=[{'name':'red'}, {'name':'green'}, {'name':'blue'}]
return render_template('index.html', data=data)
以及您的html
模板
<select name="colour" class="select-field">
{% set default_value = 'green' %}
{% for d in data %}
<option value="{{ d.name }}" {% if d.name == default_value %}selected="selected"{% endif %}>{{ d.name }}</option>
{% endfor %}
</select>