选择 jinja 内的 Flask wtforms selectfield 的默认值以获取动态数据

viz*_*228 3 jinja2 flask python-3.x flask-wtforms

我正在尝试设置一个选择字段的默认值,该字段是使用 html 页面中的 jinja 使用 for 循环动态生成的,但我在文档中找不到执行此操作的解决方案。基本上,如果可能的话,我需要一种使用 jinja 设置选择字段的默认值的方法。

我无法在 python 中从路由端或表单端设置默认值,因为字段是动态创建的,并且默认值需要根据选择而有所不同。如果我使用字符串字段而不是选择字段,我可以设置默认值。

谁能帮我找到这个问题的解决方案?我可以切换到不同的表单字段来代替选择字段吗?

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

如何使用我想要转换为 selectfield 的 stringfield 完成此操作的代码:

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

谢谢

小智 8

关于使用 WTForms 和 Jinja2 以及动态数据设置 SelectField 的默认值,您可以使用以下示例:

首先,在表单中定义 SelectField。

class MyForm(FlaskForm):
    country_id = SelectField("Country", coerce=int) #[('1','USA'),..])
Run Code Online (Sandbox Code Playgroud)

然后查询数据库以构造可用值的列表。

@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
Run Code Online (Sandbox Code Playgroud)

最后在 html 中,使用 process_data 定义所选值。注意:未使用 z 变量。

{% set z = form.country_id.process_data(countryNameVariable) %}
{{ form.country_id(class="")}}
Run Code Online (Sandbox Code Playgroud)

  • 什么是国家名称变量? (2认同)