Python 烧瓶-存储模板中的下拉列表值
我正在开发一个Flask/Postgres应用程序,遇到了一个我创建的下拉列表的问题-我不知道如何将下拉列表中的选定值存储到数据库中。请让我知道我错过了什么。我在谷歌上搜索过,但大多数相关答案都与PHP有关,而不是烧瓶 以下是我的观点:Python 烧瓶-存储模板中的下拉列表值,python,flask,Python,Flask,我正在开发一个Flask/Postgres应用程序,遇到了一个我创建的下拉列表的问题-我不知道如何将下拉列表中的选定值存储到数据库中。请让我知道我错过了什么。我在谷歌上搜索过,但大多数相关答案都与PHP有关,而不是烧瓶 以下是我的观点: @app.route('/logworkout', methods=['POST']) def post_log_workout(): try: studio = (request.form.get['studio']) instruct
@app.route('/logworkout', methods=['POST'])
def post_log_workout():
try:
studio = (request.form.get['studio'])
instructor = (request.form.get['instructor'])
workout = Workout(studio=studio, instructor=instructor)
db.session.add(workout)
db.session.commit()
except:
return render_template("submit_workout.html", studio="", instructor="",
error="Error, your log is incomplete! Please check and submit it again!")
return render_template("submit_workout.html", studio=studio, instructor=instructor, error="")
以下是HTML:
<form action="" method='post'>
<h3>2. Which Studio?</h3>
<select name='studio'>
<option value='Name1'>LongerName1</option>
<option value='Name2'>LongerName2</option>
<option value='Name3'>LongerName3</option>
</select>
<h3>2. Which Instructor?</h3>
<select name='instructor'>
<option value='Name1'>LongerName1</option>
<option value='Name2'>LongerName2</option>
<option value='Name3'>LongerName3</option>
</select>
<input type='submit' value='submit'>
</form>
2.哪个工作室?
LongerName1
LongerName2
LongerName3
2.哪个教练?
LongerName1
LongerName2
LongerName3
您有几件事需要纠正
首先,Flask视图应该同时具有GET和POST,我会将您的视图代码重新排列为:
@app.route('/logworkout', methods=['GET','POST'])
def post_log_workout():
error=""
if request.method == 'POST':
studio = (request.form.get['studio'])
instructor = (request.form.get['instructor'])
if studio is not None and instructor is not None:
workout = Workout(studio=studio, instructor=instructor)
db.session.add(workout)
db.session.commit()
# you can redirect to home page on successful commit. or anywhere else
return redirect(url_for('index'))
else:
error="Error, your log is incomplete! Please check and submit it again!")
return render_template("submit_workout.html", error=error)
您只需要在代码中使用一次render_模板。它的工作方式是,当启动GET请求时,即您第一次访问url/logworkout时,将显示表单,一旦输入并发布,表单将重定向到主页或任何位置
在表单代码中,表单操作不应为空。您需要使用url_for()方法调用视图
改变这个
# Incorrect
<form action="" method='post'>
#不正确
到
#正确
为什么视图支持也应该如此?这在这里不是必需的。您最初是否会通过GET?Sure呈现submit_-Outwork.html模板,但这似乎不是问题所在;我想我们可以假设有一个单独的路由来处理初始表单渲染。是的,如果有单独的路由,那么就更正。我只是根据代码假设此路由同时处理渲染和提交。你是对的,这不是主要问题,但我想让OP知道使用一个视图,而不是多次使用return语句。是的,有一个单独的路由支持GET,它处理表单呈现(我没有在这里发布,因为我认为没有必要)。谢谢你清理我的代码!经过一段时间的调试,我了解到问题不是我的下拉代码——models.py导入不起作用,因此下拉列表中的值没有被存储!
# Correct
<form action="{{ url_for('post_log_workout') }}" method='post'>