Flask / WTForms SelectField работает только при первой загрузке страницы? - PullRequest
0 голосов
/ 04 апреля 2020

Я едва понял, как реализовать раскрывающийся список в Flask с помощью WTForms, и он работает именно так, как я хочу, но только в первый раз. Если я захожу на страницу с раскрывающимся списком, она работает точно так же, как и ожидалось, и правильно отправляет сообщения о перенаправлении, которое также работает отлично. Но если я go вернусь на страницу с раскрывающимся списком, все параметры раскрывающегося списка исчезнут, и выбрать что-либо будет невозможно. Это происходит, даже если я просто go перехожу на эту страницу и перезагружаюсь, не отправляя и даже не посещая другие страницы. Может кто-нибудь сказать мне, что я делаю неправильно?

Вот код формы и маршрута:

class SelectForm(FlaskForm):
    selectartist = SelectField('Artist', choices=artists)
    selectgenre = SelectField('Genre', choices=genres)

@app.route('/filter', methods=['GET', 'POST'])
def filter():
    try:
        if request.method == "POST":
            enteredArtist = request.form['selectartist']
            enteredGenre = request.form['selectgenre']
            return redirect(url_for('test', artist=enteredArtist, genre=enteredGenre))
    except Exception as e:
        flash(e)

    filterform = SelectForm()

    return render_template('filter.html', form=filterform)

И вот html для страницы (бесстыдно скопировано из другого вопроса здесь):

{% macro render_bootstrap_field(field) %}

<div class="form-group {% if field.errors %} error {% endif %}">
    <label class="col-lg-2 control-label">{{ field.label }}</label>

    <div class="col-lg-8">
        {{ field(class='form-control')|safe }}
        {% if field.errors %}
            {% for error in field.errors %}
                <span class="help-inline">[{{ error }}]</span><br>
            {% endfor %}
        {% endif %}
    </div>
</div>
{% endmacro %}

{% block app_content %}
<div class="container-fluid" style="margin-top: 10em">
    <div class="row">
       <form method="POST" action="#">
            {{ render_bootstrap_field(form.selectartist) }}
            {{ render_bootstrap_field(form.selectgenre) }}
            <input type="submit" value="Go">
        </form>
    </div>
</div>
{% endblock %}
...