그래서 저는 FlaskForm과 wtform을 사용하여 SelectField를 포함하는 웹 양식을 만들고 있습니다. 사용자가 양식을 제출하면 아무런 문제없이 StringFields를 읽을 수 있지만 SelectField의 값은 항상 None입니다.
나는이 문제를 몇 시간 동안 고치기 위해 노력해 왔지만 내 코드에서 무엇이 잘못되었는지에 대한 대답이나 설명을 찾을 수 없었다.
나는 성공하지 못한 다음 스레드를 보았다.
그리고 더 많이 찾을 수 없었습니다. 나는 또한 읽어 문서 및 이러한 예.
다음은 문제를 재현하는 몇 가지 코드입니다.
from flask import Flask, url_for, redirect, request, render_template_string
from flask_wtf import FlaskForm
from wtforms import SelectField, SubmitField
app = Flask(__name__)
app.config["SECRET_KEY"] = "very_secret"
# basic html template
my_html = """
<div class="content-section">
<form method="POST" action=".">
{{form.hidden_tag()}}
<fieldset class="form-group">
<legend class="border-bottom mb-4">New Task</legend>
<div class="form-group">
{{ form.select.label(class="form-control-label")}}
<select class="form-control" id="continent_selector">
{% for choice in form.select.choices %}
<option value="{{ choice[1] }}">{{ choice[0] }}</option>
{% endfor %}
</select>
</div>
</fieldset>
<div class="form-group">
{{ form.submit(class="btn btn-outline-info")}}
</div>
</form>
</div>
"""
class TaskForm(FlaskForm):
tuple_list = [("Choice_0", 0), ("Choice_1", 1)]
select = SelectField("select", choices=tuple_list)
submit = SubmitField("Create Task")
@app.route("/", methods=["GET", "POST"])
def new_task():
form = TaskForm()
if request.method == "POST":
print("-------------FORM--------------")
print(form.data)
print("-------------END--------------")
return str(form.select.data)
return render_template_string(my_html, title="New Task", form=form)
if __name__ == "__main__":
app.run(debug=True)
form.data를 인쇄하는 것은 다음과 같습니다.
{'select': 'None', 'submit': True, 'csrf_token': 'some_hash'}
누군가 내가 뭘 잘못하고 있는지 지적 할 수 있다면 좋을 것입니다. :)
귀하의 select
태그는 이름이 필요합니다. 바꾸다:
<select class="form-control" id="continent_selector">
와:
<select class="form-control" id="continent_selector" name="select">
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다