Python Flask Форма - html Поле выбора, возвращающее «Нет» в качестве выбранного элемента - PullRequest
0 голосов
/ 02 августа 2020

Я создаю программу сервера веб-сайтов с Flask и Python, я относительно новичок в Flask. Я создал форму html с тегом Select (раскрывающееся меню, одиночный выбор). Вы можете увидеть код ниже.

selectmenu. html

<!doctype html>
<html>
<body>
    <form id="form" method="POST" class="selectform">
        <select method="GET" size=5>
            {% for x in options %}
            <option value="{{x}}" SELECTED>{{x}}</option>
            {% endfor %}
        </select>
        <input type="submit" name="go"></input>
    </form>
</body>
</html>

Код Python для Flask: app.py

@app.route('/selectmenu',methods=(['GET','POST']))
def selmenu():
    optionfiles = os.listdir('options')
    form = selectform()
    if request.method == 'POST':
        selectedoption = form.selectedoption.data
        print(selectedoption)
        return redirect('/')
    return render_template('selectmenu.html',options=optionfiles,form=form)

И, наконец, Python код классов WTForms forms.py :

class selectform(FlaskForm):
    optionfiles = os.listdir('userdata')
    print(optionfiles)
    selectedoption = SelectField('selectdropdown', choices=optionfiles,validators=[DataRequired()])
    submitbutton = SubmitField('submit',validators=[DataRequired()])

Но когда программа вызвала form.selectoption.data, она возвращает None каждый раз.

Я пробовал много руководств и ответов Stackoverflow, но все еще не могу получить данные из формы, отличной от None.

ПРИМЕЧАНИЕ. Как вы понимаете, я загрузил только фрагменты кода, так как сами файлы намного больше! Если вам нужны другие фрагменты кода, например: импорт, спросите, но я почти уверен, что ошибка, например, не в импорте! В противном случае я получил бы ошибку ImportError.

Заранее благодарим вас за помощь!

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Найдя этот пост в Stackoverflow , я нашел ответ.

Мне нужно было дать тегу <select> имя, например: name="optionsbox" в файле html . Затем введите request.form.get("optionsbox") в файле app.py вместо form.selectedoption.data. Не требуется никаких изменений в файле forms.py .

0 голосов
/ 02 августа 2020

Кажется, что вы используете Flask -WTF (FlaskForm), но способ написания части html не соответствует этому. Чтобы подтвердить, что вы можете заменить selectmenu.html на:

<!doctype html>
<html>
<body>
    <form method="POST">
        {{ form.selectedoption() }}
        {{ form.csrf_token }}
        {{ form.submitbutton(class_='btn btn-primary') }}
    </form>
</body>
</html>

Если это так, вы можете взглянуть на https://flask-wtf.readthedocs.io/en/stable/quickstart.html и https://flask.palletsprojects.com/en/1.1.x/patterns/wtforms/#forms -в-шаблонах (для простого шаблона).

return render_template('selectmenu.html',options=optionfiles,form=form) можно заменить на return render_template('selectmenu.html',form=form))

...