2016-02-07 42 views
0

林获得项目从显示HTML表单的Python瓶从HTML选择表单

无法得到任何东西,我总是得到"ValueError: View function did not return a response"

有人可以帮助我在这里吗?我已经尝试了可以​​在网上找到的request.get的每个变体。此外,如果我指定我的表单应该使用后,它使用无论如何 - 任何人都知道这是为什么?

进出口新的烧瓶中,所以请原谅我的无知!

在此先感谢。

蟒蛇文件(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 %} 

回答

1

的问题是,你的HTML表单没有名称。 request.args.get("som")需要一个HTML表单输入名称"som"

<select name="som" id="som" size="20"> 

只要改变该行并添加姓名。该表单对id属性不感兴趣。

+0

对不起,我最初尝试了它的名字,只是再次 - 没有改变错误相同 – user3788339

-1

你的表单操作是/pop。这意味着,如果您提交的形式,它会做一个POST请求地址/pop。您的代码只会返回GET请求的值,因此Flask会抱怨您不会返回任何内容。编写一些代码来处理POST请求并返回文本或呈现的模板。

顺便说一句,在GET你的代码是指request.args.get('som');这会为您提供请求参数(即在URL中),而不是从表单中获取参数。 som的形式,所以你不能这样引用它。

+0

形式的默认方法是'GET'而不是'POST' [链接](http:// www。 w3schools.com/tags/att_form_method.asp) – Wombatz

+0

@ Wombatz爱,是我不好。这会教会我不要正确阅读代码。感谢您的更正。 –

0

你不指定形式的方法,你必须这样做!例如使用这个<form method="POST action"/pop">