gpt4 book ai didi

flask - 如何使用 Jinja 模板为选择字段设置默认选项

转载 作者:行者123 更新时间:2023-12-03 17:01:06 24 4
gpt4 key购买 nike

我需要使用 Jinja 模板将默认选项值添加到选择字段。

表单.py

class TeamForm(Form):
user = SelectField(u'Team Member')

View .py

class myview(request,id):
form = TeamForm(request.form)
members =db.session.query(teams).filter_by(t_id = id).all()
return render_template("members.html",form=form,members=members)

成员.html

<table>
{% for member in members%}
<tr>
<td>{{ form.user(class_="form-control",value=user.id) }}</td>
</tr>
{% endfor %}
</table>

分配的选项值未显示在输出中。

我必须根据团队成员循环选择字段。例如,如果一个团队有 3 个成员,我将显示三个选择字段并自动选择这三个成员。

最佳答案

这里有两个问题:

  1. 要在表单中实现默认值,只需对 form.py 中的 SelectField 类使用 default=(value, label) 选项。

    假设您希望默认 Johnny 作为您的团队成员,并且该选项的数值为 0。那么您可以使用 default=(value, label) 执行类似的操作:

     class TeamForm(Form):
    user = SelectField(u'Team Member', default=(0, "Johnny"))

    只要传入一个形式为(value,label)的元组即可。您的值可以是整数、字符串等等。 (您还缺少提交按钮,我认为这是偶然的。)

  2. 我不确定您在做什么。你说,“在这里我必须根据团队成员循环选择字段。例如,如果团队有 3 名成员,我将显示这三个成员自动选择的三个选择字段。”您是说您只需要在呈现表单时在下拉字段中向用户显示这些内容,还是在呈现模板时向用户实际显示查询结果时遇到问题?

    因为您有一个表单,我假设您将通过 POST 向服务器提交数据。典型的 View 模式会创建一个空白表单对象,并在通过 GET 请求呈现模板时将其传递给用户。当用户输入数据并提交时,它会通过 POST 请求发送。我还注意到您使用了一个类来表达您的观点。我建议使用装饰器代替路由,并让它调用一个函数。

    比方说,如果您的表单中有三个选项,并且您希望在下拉列表中向用户显示它们,那么您将需要实现如下内容:

    表单.py:

     # Sample Form class; choices can be overridden later.

    class TeamForm(Form):
    user = SelectField(u'Team Member', default=(0, "Johnny"), choices=[(0, "Johnny"), (1, "Sarah"), (2, "Bill")])
    submit= SubmitField('Submit')

    View .py:

     @app.route('/team', methods=['GET','POST'])
    def team_view(id):
    user_selection = None
    form = TeamForm()
    # This code block will only execute on POST
    if request.method == 'POST':
    if form.validate_on_submit():
    user_selection = form.user.data
    form.user.data = ''
    return redirect(url_for(some-other-page.html))
    members =db.session.query(teams).filter_by(t_id = id).all()

    # This next line will override the default choices in your form.
    form.user.choices = [(member.id, member.name) for member in members]

    return render_template("members.html",form=form)

    成员.html:

    选项 1:

        <!-- Assume you're using Flask-Bootstrap & WTForms -->
    {% import "bootstrap/wtf.html" as wtf %}

    <!-- Render your Team form; this is where you call to your form object -->
    {{ wtf.quick_form(form) }}

    选项 2:

         <!-- Manually construct your template --> 
    <form method="POST" action="/team">
    <div>{{ form.user }}</div>
    <div>{{ form.submit() }}</div>
    </form>

关于flask - 如何使用 Jinja 模板为选择字段设置默认选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38237658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com