【问题标题】:Select default value for flask wtforms selectfield within jinja for dynamic data为 jinja 中的烧瓶 wtforms 选择字段选择默认值以获取动态数据
【发布时间】:2019-07-16 07:25:53
【问题描述】:

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

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

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

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

如何处理我想翻译成选择字段的字符串字段的代码:

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

谢谢

【问题讨论】:

  • 默认值是选择之一,还是第一个还是随机的?
  • 是的,默认是其中一种选择
  • @viz228 我希望this 是您正在寻找的内容
  • 是的,但是您希望如何根据什么标准将其标记为默认值?
  • 它基于从我的数据库中提取的数据。我编辑了主要帖子以包含我如何使用 stringfields 进行此操作的示例

标签: python-3.x flask jinja2 flask-wtforms


【解决方案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="")}}

【讨论】:

  • 什么是 countryNameVariable ?
  • 我得到了这样的东西:

    {{ form.country_id.label }}
    {{ form.country_id(size = 10) }}

    我该如何适应?
【解决方案2】:

这是我能想到的唯一方法

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

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2016-07-30
    • 2020-06-03
    • 2012-10-24
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多