【问题标题】:Routing in Flask applicationFlask 应用程序中的路由
【发布时间】:2017-04-19 03:34:03
【问题描述】:

我的烧瓶应用程序遇到路由问题。

路由定义如下

@app.route("/<lang>/books/<name>.html")
def func1(lang="en", name="")
    pass

@app.route("/<lang>/books/index.html")
def func2(lang="en"):
    pass

因此,如果请求像 /en/books/index.html 这样的 url - 它应该路由到第二个函数,但烧瓶将它路由到第一个函数。

为什么会这样??我还通过将上面的 func2 更改为 func1 来更改代码的顺序,但仍然遇到同样的问题,我能知道如何解决它吗?

【问题讨论】:

    标签: python flask routes


    【解决方案1】:

    这个怎么样?

    @app.route("/<lang>/books/<name>.html")
    def func1(lang="en", name=""):
    
       if name == "index":
            return index()
    
       return something_else()
    

    【讨论】:

    • 是的,我也想过实现上述的,因为我已经这样做了,但这不是正确的。为什么我们不能只路由到单独的函数,因为路由的端点比通用的更具体。
    • @IronFist,因为我不想在第二个函数中进行额外检查并调用第一个函数。如果我们在顶部有更多的 url 例如:@app.route("/category/index.html") @app.route("//books/.html") - 在这种情况下我应该不只检查 name == "index" ,因为我想执行 func1 而不是调用 index 函数
    • @RinsenS 为什么要将/category/index.html 路由到与/&lt;lang&gt;/books/&lt;name&gt;.html 相同的位置?我认为这会让用户感到困惑
    • @jprockbelly - 上面的命名只是示例,如果我们在 func1 之上有 url,该函数应该执行 - 例如:/category/index.html 或 /news/index.html 所以check name == "index" 并非在所有情况下都有效,对。您能帮忙解决上述问题吗
    • @RinsenS - 我建议你不要那样做。更好的方法是/&lt;basename&gt;/index.html,然后您可以使用basename 返回正确的内容。如果这些只是例子,那么它们是坏的。发布您真正想要的网址,我们可以提出解决方案
    猜你喜欢
    • 2023-03-14
    • 2011-11-22
    • 2021-01-25
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多