Python 3.x 在jinja中为动态数据选择默认值

Python 3.x 在jinja中为动态数据选择默认值,python-3.x,flask,jinja2,flask-wtforms,Python 3.x,Flask,Jinja2,Flask Wtforms,我正在尝试为一个select字段设置默认值,该字段是在html页面中使用jinja使用for循环动态生成的,我在文档中找不到这样做的解决方案。基本上,如果可能的话,我需要一种使用jinja设置selectfield默认值的方法 在python中,我无法从routes端或forms端设置默认值,因为字段是动态生成的,默认值需要根据选择的不同而有所不同。如果使用stringfield而不是selectfield,则可以设置默认值 有人能帮我找到解决这个问题的办法吗?我可以切换到另一个formfiel

我正在尝试为一个select字段设置默认值,该字段是在html页面中使用jinja使用for循环动态生成的,我在文档中找不到这样做的解决方案。基本上,如果可能的话,我需要一种使用jinja设置selectfield默认值的方法

在python中,我无法从routes端或forms端设置默认值,因为字段是动态生成的,默认值需要根据选择的不同而有所不同。如果使用stringfield而不是selectfield,则可以设置默认值

有人能帮我找到解决这个问题的办法吗?我可以切换到另一个formfield来代替selectfield吗

第二个问题是,如果我将id和名称设置为生成html页面时的id和名称,那么我是否可以构建并使用手动html字段,在提交时该字段仍然可以与其他wtform字段一起工作?如果可能的话,我可能有办法用这种方式解决我的问题

我希望将stringfield转换为selectfield的代码:

{% for d in data %}
{{ form.type.label(class="label") }}
{{ form.type(class="field", value=d.type) }}
{% endfor %}

谢谢

这是我能想到的唯一方法

您可以在
视图.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>

{%set默认值='绿色'%}
{数据%中d的%s}
{{d.name}
{%endfor%}

关于使用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_数据定义所选值。 注:未使用z变量

{% set z = form.country_id.process_data(countryNameVariable) %}
{{ form.country_id(class="")}}

默认值是选项之一,还是第一个或随机值?是的,默认值是选项之一choices@viz228我希望是你所期待的是的,但是你想如何标记为默认值,基于什么标准?它基于从我的数据库中提取的数据。我编辑了这篇主要文章,其中包括了一个我如何处理StringFields的例子CountryName变量是什么?我得到了这样的信息:{{form.country\u id.label}
{{form.country\u id(size=10)}

我如何适应?