【问题标题】:Flask - Dynamic URLsFlask - 动态 URL
【发布时间】:2014-01-26 01:08:53
【问题描述】:

当我使用太多动态 URL 时,我的样式表会停止工作。例如。我的样式表在 /static/css/style.css 下的 layout.html 文件中

代码:

#works
@app.route('/<var1>', methods=['blah'])
def someFunc(var1):
    # code

#works
@app.route('/<var1>/<var2>', methods=['blah'])
def someNewFunc(var1, var2):
    # code

#no errors displayed but my stylesheet stops loading
@app.route('/<var1>/<var2>/<var3>', methods=['blah'])
def finalFunc(var1, var2, var3):
    # code

所以我有两个问题。首先,Flask 不支持超过两个的动态 URL 吗?其次,有没有更好的方法来解决这个问题(即我应该遵循一个约定)?

【问题讨论】:

  • 为什么您的样式表要通过视图? url_for('static', filename='css/style.css') 会为你解决这个问题。

标签: python url flask


【解决方案1】:

问题是您的路线不明确。当浏览器在/static/css/style.css 请求您的样式表时,Flask 会找到两个匹配的路由:

  • /static/&lt;path:path&gt;path=css/style.css
  • /&lt;var1&gt;/&lt;var2&gt;/&lt;var3&gt;var1=staticvar2=cssvar3=style.css

Flask 和 Werkzeug 使用的路由算法在多个匹配时更喜欢最长的路由,这使得第二个获胜。

this question 的答案显示了使用自定义路由转换器解决此问题的可能方法。

但我的建议是您更改动态 URL,使其不那么通用。您可以为其添加固定组件,例如/some-prefix/&lt;var1&gt;/&lt;var2&gt;/&lt;var3&gt;

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2013-12-07
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多