如何渲染Flask WTF HTML 5小部件?

0 投票
1 回答
2431 浏览
提问于 2025-04-18 05:18

我正在尝试使用Flask的HTML 5小部件来构建一个RangeInput(可以搜索“range”找到它)。

我觉得我的HTML模板缺少了一些东西,因为它的显示效果是这样的:

它没有创建一个表单,而是文本!

如你所见,这并不是我想要的效果:我期待的是这样的:

在这里输入图片描述

所以我觉得这个错误并不复杂,但我找不到问题所在。以下是我的不同文件:

__author__ = 'laurentmeyer'

# That's my main class, don't be afraid, all is local, you cannot hack anything

from MySQL import MySQL
from flask import Flask, render_template
from Form import Form;

mysql = MySQL();
app = Flask(__name__)
app.config['MYSQL_DATABASE_USER'] = 'Laurent'
app.config['MYSQL_DATABASE_PASSWORD'] = 'laurent'
app.config['MYSQL_DATABASE_DB'] = 'Houses'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)

@app.route("/")
def home():
    cursor = mysql.connect().cursor()
    cursor.execute("SELECT * from Offers;")
    data = cursor.fetchall()
    form = Form(csrf_enabled=False);
    if data is None:
        return "No data"
    else:
            return render_template('DB template.html',form = form, offers = data)

if __name__ == "__main__":
    app.run()

我的HTML模板:

<!DOCTYPE html>
<html>
<head>
    <title>Tableau des maisons</title>
</head>
<body>
<form><p>Test: {{ form.ImportanceOfPrice }} </p></form>
<!--<table>{% for house in offers %}<tr><td>Titre: {{house[0]}}</td><td>Lien: <a href="{{house[1]}}">{{house[1]}}</a></td></tr>{% endfor %}</table>-->
</body>
</html>

最后,这是我的Form.py(非常简单):

__author__ = 'laurentmeyer'

from flask_wtf import Form
from flask_wtf.html5 import RangeInput

class Test(Form):
    ImportanceOfPrice = RangeInput(0.1)

1 个回答

5

以下代码应该会对你有帮助:

from flask import Flask, render_template
from wtforms import Form
from wtforms.fields.html5 import DecimalRangeField


app = Flask(__name__)
app.config['DEBUG'] = True


class TestForm(Form):
    price_importance = DecimalRangeField('Price Importance')


@app.route("/")
def home():
    form = TestForm(csrf_enabled=False)
    return render_template('tpl.html', form=form)


if __name__ == "__main__":
    app.run()

模板 tpl.html 默认情况下应该放在一个叫做 'templates' 的文件夹里:

<!DOCTYPE html>
<html>
<body>
<form>
    <p>{{ form.price_importance.label }}: {{ form.price_importance }}</p>
</form>
</body>
</html>

你的代码有一些错误:

  • 在 Python 中,不需要用分号来结束语句。
  • 你没有导入正确的表单类(你应该导入 Test 表单类)。
  • 在表单类中,通常需要声明 fields(这些字段会通过小部件来显示)。

撰写回答