【问题标题】:Flask Iterating data in WTForms from a list with jinja2 to generate form fieldsFlask 从带有 jinja2 的列表中迭代 WTForms 中的数据以生成表单字段
【发布时间】:2017-03-06 21:05:46
【问题描述】:

我正在尝试使用 BooleanField() 在 json 文件中生成 html 表中的清单到目前为止,我没有使用 wtforms:

来自 view.py

from app import app

from flask import render_template

json_data = [{'Description':'Red', 'id':'f1'},{'Description':'Green', 'id':'f2'},{'Description':'Blue', 'id':'f3'}]


@app.route('/taggs', methods = ['GET', 'POST'])
def taggs()
    return render_template('taggs.html', jdata = json_data)

来自 taggs.html

<form role="form" method= "post">
<table id='ctable'>
    <thead>
    <tr>
        <th data-field="Description"></th>
        <th data-field="Selection"></th>
    </tr>
    </thead>
<tbody>

</tbody>
    {% for i in jdata %}
    <tr>
        <td>{{ i.Description }}</td>
        <td><input type ="checkbox" id = "{{ i.id }}"></td>
    </tr>
    {% end for%}
</table>
</form>

有没有办法使用 wtforms 中的列表生成表单字段?还是我必须创建一个类并声明列表中的每个变量?

【问题讨论】:

    标签: python html flask flask-wtforms


    【解决方案1】:

    是的,您可以在视图函数中动态执行此操作。

    The docs 有一个例子,你可以按照以下方式进行调整:

    from flask import render_template, request
    from flask_wtf import Form
    from wtforms import BooleanField
    
    json_data = [{'Description':'Red', 'id':'f1'}, 
                 {'Description':'Green', 'id':'f2'}, 
                 {'Description':'Blue', 'id':'f3'}]
    
    
    @app.route('/taggs', methods = ['GET', 'POST'])
    def taggs():
        class CustomForm(Form):
            pass
    
        for item in json_data:
            setattr(CustomForm, item["id"], 
                    BooleanField(item["description"], id=item["id"]))
    
        form = CustomForm(request.form)
    
        return render_template('taggs.html', form=form)
    

    【讨论】:

    • @PJ_Santoro 你在 jinja 2 循环中放了什么?
    • 如果您使用 Flask-Bootstrap,您可以使用 the wtf.quick_form() macro 或循环访问项目 {% for element in form %}{{ element.label }}{{ element() }}...,如 wtforms docs。主要取决于您的数据模型以及您希望它如何呈现。
    猜你喜欢
    • 2015-03-05
    • 2018-02-06
    • 2020-11-11
    • 2014-02-13
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多