Python Flask从HTML选择表单中获取项目

时间:2016-02-07 17:50:52

标签: python html flask

我无法从显示的HTML表单中获取任何内容

我总是得到"ValueError: View function did not return a response"

有人可以帮帮我吗?我已经尝试了我可以在网上找到的request.get的每个变体。另外,如果我指定我的表格应该使用post它仍然使用get - 任何人都知道为什么这是?

我是新来的烧瓶,请原谅我的无知!

提前致谢。

python文件(routes.py)

from flask import Flask, render_template, request
import os
app = Flask(__name__)     
musicpath = os.listdir(r"C:\Users\Oscar\Music\iTunes\iTunes Media\Music")
lsize = str(len(musicpath))
looper = len(musicpath)


@app.route('/')
def home():
    return render_template('home.html', lsize=20, looper=looper, musicpath=musicpath)

@app.route('/pop', methods=['POST', 'GET'])
def pop():
    if request.method == "GET":
      text = request.args.get('som')
      return text
      #Have tried every variation of request.get

@app.route('/about')
def about():
    name = "Hello!"
    return render_template('about.html', name=name)



if __name__ == '__main__':
    app.run(debug=True)

html文件(home.html)

{% extends "layout.html" %}
{% block content %}
  <div class="jumbo">
    <h2>A Music app!<h2>
  </div>
  <div>
        {% if lsize %}
            <form action="/pop">
                <select id="som" size="20">
                {% for i in range(looper):%}
                    <option value="{{i}}">{{ musicpath[i] }}</option>
                {% endfor %}
                </select>
            </form>
        {% endif %}
    </div>
    <a href="{{ url_for('pop') }}">Select,</a>

{% endblock %}

3 个答案:

答案 0 :(得分:1)

问题是你的HTML表单没有名称。 request.args.get("som")需要名为"som"

的HTML表单输入
<select name="som" id="som" size="20">

只需更改该行并添加名称即可。表单对id属性不感兴趣。

答案 1 :(得分:0)

您没有指定表单的方法,您必须这样做!例如,使用此<form method="POST action"/pop">

答案 2 :(得分:-1)

您的表单操作为/pop。这意味着,如果您提交表单,则会向地址POST发出/pop个请求。您的代码只返回GET请求的值,因此Flask会抱怨您不返回任何内容。编写一些代码来处理POST请求并返回文本或渲染模板。

BTW,在GET的代码中,您引用了request.args.get('som');这会为您提供请求参数(即在URL中),而不是表单。 som在表单中,因此您无法以这种方式引用它。