【问题标题】:Flask form SelectField烧瓶形式 SelectField
【发布时间】:2020-04-04 21:28:36
【问题描述】:

我的 app.py 如下所示:

from flask import Flask,render_template,url_for,request
from flask_bootstrap import Bootstrap
from wtforms import SelectField
from flask_wtf import FlaskForm

app = Flask(__name__)
Bootstrap(app)


def Form(FlaskForm):
    panel_brand = SelectField('Panel Brand',choices=[('tr','trina'),('lo','longi'), ('ph','phono'), ('leap','leapton')])
    mounting = SelectField('Mounting',choices=[('tr','trina'),('lo','longi'), ('ph','phono'), ('leap','leapton')])
    inverter = SelectField('inverter',choices=[('Fronius10','Fronius 10'),('Fronius5','Fronius 5'), ('huawei6','huawei 6'), ('huawei8','huawei 8') , ('SolarEdge125','SolarEdge 12,5')])
    order_fulfillment = SelectField('orderfulfillment',choices=[('all3','Panels + inverter + mounting'),('Panels','Panels'),('panelsinv','Panels + Inverter'),('installer','By Installer')])


@app.route('/', methods=['GET','POST'])
def index():
    form = Form(FlaskForm)
    return render_template('index.html', form=form)
if __name__ == '__main__':
    app.run(debug=True)

而我的 index.html 看起来像这样

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form method="POST">
        {{ form.csrf_token }}
        {{ form.panel_brand }}
        {{ form.mounting }}
        {{ form.inverter }}
        {{ form.order_fulfillment }}
    <input type="submit">
    </form>
</body>
</html>

当我运行 app.py 文件时,它只显示提交按钮,而不是预期的下拉列表panel_brandmountinginverterorder_fulfillment- 具有后续值。我想我在index() 函数中缺少一些调用ID?我不确定如何以正确的语法做到这一点。有人可以帮我吗?

【问题讨论】:

    标签: python post flask get


    【解决方案1】:

    你的代码有一个函数,它需要一个类。

    改变

    def Form(FlaskForm):
    ...
    form = Form(FlaskForm)
    

    class Form(FlaskForm)
    ...
    form = Form(request.form)
    

    【讨论】:

    • 扩展“没用”。为表单呈现的 HTML 是什么样的?
    • 对不起。它现在给出了一个错误 RuntimeError: A secret key is required to use CSRF. 。你知道它是什么吗?
    • 参见flask-wtf.readthedocs.io/en/stable/csrf.html中的“使用 FlaskForm 时”
    • 刚刚找到了秘钥!非常感谢! :) 您将 def 替换为 class 的帮助 :)
    【解决方案2】:

    您的 form 声明似乎是另一个对象的子类。

    试试:

    def index():
        form = Form(request.form)
    

    【讨论】:

    • 正如 Dave 提到的,您的 Form 被声明为一个函数。按照他的建议,把它改成一个类。
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多