【发布时间】:2012-12-29 20:39:10
【问题描述】:
我正在编写一个 Flask 站点,我希望有这样的路由:
@app.route('/')
@app.route('/<page_id>')
@app.route('/<page_id>/<subpage_id>')
def page(page_id=None, subpage_id=None):
...
虽然这看起来理论上应该可行,但看起来这实际上破坏了位于根 static/ 目录中的静态资源。我认为这是因为我的动态路由实际上匹配“static/style.css”,因此覆盖了静态文件的正常处理程序。
有没有办法解决这个问题?如果我检测到 page_id=='static',是否有可以将请求转发到的“静态”处理程序?
编辑:这是一个工作示例
@app.route('/<page_id>/<subpage_id>/<subsubpage_id>')
def xxx(page_id=None, subpage_id=None, subsubpage_id=None):
return 'hello'
如果你现在打开http://127.0.0.1:5000/static/css/style.css,你应该得到一个“hello”而不是文件。
【问题讨论】:
-
如果保证这些变量是整数,您可以在路由中指定它,这应该对您有所帮助。否则,我不确定为什么会发生这种情况。
-
不幸的是,它们不是整数。我刚刚添加了一个示例,如果您将其插入到通常的 Flask 框架中,那么指向 CSS 的 URL 将不再起作用。
-
你真的在捕获
/<page>/<subpage>/<subsubpage>吗?如果你有一个功能可以做所有事情,那么使用路由有什么意义? -
是的。我的数据库中有 Page 对象,当调用该方法时,我会根据 page_id/subpage_id/subsubpage_id 加载和显示这些对象。有一个更好的方法吗?我正在考虑在应用程序初始化时为每个页面添加单独的路由,但我找不到与 url_for 结合使用的好方法。