Как визуализировать виджет Flask WTF HTML 5?

Я пытаюсь использовать виджеты html 5 Flask для создания RangeInput (ищите «диапазон», чтобы найти его). Я думаю, что мне что-то не хватает в шаблоне 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)

person Laurent Meyer    schedule 04.05.2014    source источник
comment
Я думаю, вы хотите from Form import Test вместо from Form import Form в своем основном модуле.   -  person Burhan Khalid    schedule 04.05.2014


Ответы (1)


следующий код должен быть полезен:

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)
  • В классе формы обычно следует объявлять поля (которые отображаются с помощью виджетов).
person pedrotech    schedule 04.05.2014
comment
Хорошо, некоторые наблюдения неверны: он уже был в шаблонах, тест уже был импортирован (но во время моих тестов случилось так, что я его больше не импортировал). Я думаю, что ошибка связана с тем, что я забыл поле. Спасибо за исправление, вы спасли мой день! - person Laurent Meyer; 04.05.2014
comment
Любые предложения о том, как отображать выбранное значение вместе с ползунком? - person zanzu; 30.06.2015