【问题标题】:Flask quickstart example - 404 with trailing slashFlask 快速入门示例 - 带有斜杠的 404
【发布时间】:2015-09-13 08:47:10
【问题描述】:

我正在阅读 Flask 快速入门指南,但 routing with variables 的示例不适用于我。

from flask import Flask
app = Flask(__name__)

@app.route('/') # fine
def index():
    return 'Index Page'

@app.route('/hello') # fine
def hello():
    return 'Hello World!'

@app.route('/user/<username>') # <- fails unless trailing slash here
def show_user_profile(username):
    return 'User {}'.format(username)

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

我也完全按照指南中的代码尝试了代码。我的第一个要点中的错误是预期的吗?快速入门版本中的代码应该可以工作吗?还是我误会了什么?

我正在使用 Python 2.7.10、Flask 0.10.1、Werkzeug 0.10.4

【问题讨论】:

    标签: python flask werkzeug


    【解决方案1】:

    我在 python2 中尝试了这个示例,它工作正常,但是在你描述的 python3 中出现了问题。你用的是第三版吗?如果你这样做,你确定你真的需要它吗?

    看看这个http://flask.pocoo.org/docs/0.10/python3/#python3-support

    【讨论】:

    • 谢谢,我使用的是 2.7 - 添加了版本详细信息来提问。
    【解决方案2】:

    这段代码在我的机器上运行了 Python 2.7。

    如果您使用多个参数,那么您在代码中错过了 {0}。

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/') # fine
    def index():
        return 'Index Page'
    
    @app.route('/hello') # fine
    def hello():
        return 'Hello World!'
    
    @app.route('/user/<username>') # <- fails unless trailing slash here
    def show_user_profile(username):
        if request.url[-1] != '/':
            return redirect(request.url + '/')
        return 'User {0}'.format(username)
    
    if __name__ == '__main__':
        app.run()
    

    如你所见,我又添加了两行代码

        if request.url[-1] != '/':
            return redirect(request.url + '/')
    

    上面的行将确保带有斜杠的路由仍然有效。如果需要,您将需要操作任何其他 path 而不是 /。请尝试此代码。

    【讨论】:

    • 谢谢,但'{}'.format(a_string) 在 Python 2 和 3 中完全有效 - 您可以省略格式参数的位置。无论如何,将0 放入您的示例中并不能解决我的问题。
    • 我以为您可能使用了多个参数。我已经更新了我的答案 - 希望对你有所帮助。
    猜你喜欢
    • 2017-07-28
    • 2017-02-04
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2021-01-21
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多