编辑:这不是一个重复的问题。我不是在问这个代码有什么问题。我非常清楚地说我知道它会引发错误,因为视图必须return
。我问为什么教程会提供会抛出错误的代码,然后既没有为用户准备该错误,也没有使用该错误来教授课程。答案是,教程并不完美。
原帖:我正在http://flask.pocoo.org/docs/0.12/quickstart/关注Flask快速入门教程。当我建立URL时,我大约在页面的2/5左右。下面的代码直接来自教程,但是当我尝试访问localhost:5000 /时,它会抛出名义上的ValueError。我知道一个视图必须return
一些东西,这就是为什么它会抛出错误。
我的主要问题是,我在教程中遗漏了哪些内容?教程不应该导致错误,除非它试图通过该错误教你一些东西,但是没有提到预期错误。相反,它似乎表明它应该使用下面的代码。如果我错过了一些基本的东西,我不想推进本教程。
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index(): pass
@app.route('/login')
def login(): pass
@app.route('/user/<username>')
def profile(username): pass
with app.test_request_context():
print url_for('index')
print url_for('login')
print url_for('login', next='/')
print url_for('profile', username='John Doe')
答案 0 :(得分:1)
你可以看到它在python shell上,docs说:
test_request_context():它告诉Flask表现得像处理请求一样,即使我们通过Python shell与它进行交互。
教程并没有说将此代码写入文件。如果您这样做:
#test.py
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index(): pass
...
if __name__ == '__main__':
app.run()
$ python test.py
/
/login
/login?next=%2F
/user/John%20Doe
因此,当您在浏览器上点击localhost:5000时,您将收到错误。查看功能未返回响应。
我的主要问题是,我是否遗漏了教程中的内容?是的,您可能不会看到它在python shell上。
答案 1 :(得分:1)
Flask中的视图函数应始终返回Response对象,否则会发生View function did not return a response
错误。似乎示例中的代码仅仅是为了引用而不是开箱即用。
有关回复的详情,请参阅http://flask.pocoo.org/docs/0.12/quickstart/#about-responses。
答案 2 :(得分:1)
您访问localhost:5000
时会遇到错误,因为您没有运行app
。你是对的,它也应该归还。
这个块的目标:
with app.test_request_context():
print url_for('index')
print url_for('login')
print url_for('login', next='/')
print url_for('profile', username='John Doe')
仅用于显示url_for
生成的网址。
因此,您可以使用python your_file.py
运行文件并查看shell中的输出。