Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶-存储模板中的下拉列表值_Python_Flask - Fatal编程技术网

Python 烧瓶-存储模板中的下拉列表值

Python 烧瓶-存储模板中的下拉列表值,python,flask,Python,Flask,我正在开发一个Flask/Postgres应用程序,遇到了一个我创建的下拉列表的问题-我不知道如何将下拉列表中的选定值存储到数据库中。请让我知道我错过了什么。我在谷歌上搜索过,但大多数相关答案都与PHP有关,而不是烧瓶 以下是我的观点: @app.route('/logworkout', methods=['POST']) def post_log_workout(): try: studio = (request.form.get['studio']) instruct

我正在开发一个Flask/Postgres应用程序,遇到了一个我创建的下拉列表的问题-我不知道如何将下拉列表中的选定值存储到数据库中。请让我知道我错过了什么。我在谷歌上搜索过,但大多数相关答案都与PHP有关,而不是烧瓶

以下是我的观点:

@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'>