【问题标题】:Same URL pattern calling different view functions in Flask相同的 URL 模式在 Flask 中调用不同的视图函数
【发布时间】:2013-10-14 13:52:44
【问题描述】:

我有 URL 相关的问题。我有索引页面和项目页面(可以显示多个项目之一,具体取决于您作为参数传递的项目键)。 我想要“漂亮”的网址,这样我就可以让 domainname.com/index 和 domainname.com/some_project_key 调用不同的视图函数

@app.route('/')
@app.route('/index')
def index():
pass

@app.route('/<path:projectkey>')
def project(projectkey):
pass

这对我不起作用,因为如果我尝试进入索引页面,它将通过索引函数,但在它返回模板之前它还将运行项目函数,其中它将对不存在的项目运行查询。 是否有一些内置解决方案或需要一些解决方法? 非常感谢我能得到的任何帮助。

【问题讨论】:

  • 你必须返回。您没有退货声明
  • @Cfreak 有,但为了简单起见,我在这里省略了它们。
  • /index/ 中有反斜杠吗?不要忘记 @app.route('/index')@app.route('/index/') 使用和不使用反斜杠时的工作方式不同。
  • @tbicr 不,它的末尾没有反斜杠。附带说明一下,如果我在 url 的末尾加上反斜杠以拥有 domainname.com/index/ 它只会调用项目函数。
  • 你的代码没有问题,我只是用flask 0.10.1试了一下,一切正常,//index调用index()函数和包括@987654327在内的所有其他函数@调用项目函数。

标签: python url routing flask


【解决方案1】:

如果您尝试从网络浏览器调用索引页面,请记住许多浏览器也会对同一域进行 GET 调用以检索您的网站图标。在我试图复制这个...

from flask import Flask

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    print 'index'
    return 'index'

@app.route('/<path:projectkey>')
def project(projectkey):
    print 'project'
    return 'project'

app.run(debug=True)

跑完后,点击索引,收到了……

index
127.0.0.1 - - [14/Oct/2013 18:08:41] "GET / HTTP/1.1" 200 -
project
127.0.0.1 - - [14/Oct/2013 18:08:41] "GET /favicon.ico HTTP/1.1" 200 -

换句话说,这是有效的。但是,会打印“project”,因为浏览器会向/favicon.ico 发出第二个 GET 请求。

【讨论】:

  • 就是这样。 favicon.ico 将要进行项目(projectkey)并造成麻烦。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多