2

我刚开始玩 Flask,所以这很可能是一个非常愚蠢的问题。此应用在 Google App Engine SDK 1.7.4 上运行。Flask 0.9、Werkzeug 0.9 和 Jinja2 2.6。

以下代码按预期工作:

from flask import Flask
from flask import render_template

app = Flask(__name__)

@app.route('/')
def hello():
   return "Main page"


@app.route('/hello/', methods=['GET', 'POST'])
@app.route('/hello/<name>', methods=['GET', 'POST'])
def hello(name=None):
    return render_template('hello.html', name=name)

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

但是,如果我反转路由处理程序,则转到 /hello/ 呈现就像我转到 /

from flask import Flask
from flask import render_template

app = Flask(__name__)

@app.route('/hello/', methods=['GET', 'POST'])
@app.route('/hello/<name>', methods=['GET', 'POST'])
def hello(name=None):
    return render_template('hello.html', name=name)


@app.route('/')
def hello():
   return "Main page"

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

更糟糕的是,转到 /hello/,例如 /hello/John,会导致错误 500。

这是正常的行为吗?路线的顺序很重要吗?如果是这样,还请向我指出相关文档,并在可能的情况下解释为什么此顺序如此重要。

4

1 回答 1

7

您正在创建两个具有相同名称 ( hello) 的函数。重命名第二个:

@app.route('/')
def index():
   return "Main page"
于 2012-12-25T04:17:11.507 回答