Python 跳过/跳过视图功能,以便下一个可以在Flask中执行

Python 跳过/跳过视图功能,以便下一个可以在Flask中执行,python,flask,Python,Flask,我有一个Flask应用程序,目前有如下内容: @app.route('/') def home(): return "homepage" @app.route('/<slug>') def feature(slug): return "feature: " + slug @app.route('/<path:url>') def catch(url): return "catch: " + url @app.route(“/”) def ho

我有一个Flask应用程序,目前有如下内容:

@app.route('/')
def home():
    return "homepage"

@app.route('/<slug>')
def feature(slug):
    return "feature: " + slug

@app.route('/<path:url>')
def catch(url):
    return "catch: " + url
@app.route(“/”)
def home():
返回“主页”
@应用程序路径(“/”)
def功能(缓动):
“返回”功能:“+slug”
@应用程序路径(“/”)
def捕获(url):
返回“catch:+url”
这在以下情况下起作用:

  • GET/
    =>“主页”
  • GET/test1
    =>“功能:test1”
  • GET/test/2
    =>“catch:test/2”
最终,所有这些都将由数据库驱动。对于特征,将根据slug检索和显示它们。对于
catch
,它们将从数据库中加载,并可能导致一些行为,例如重定向或返回404。这些都不是问题

我的问题是:在
/test1
示例中,我希望实现以下行为:

  • 尝试从slug匹配的数据库加载
    test1
  • 如果存在,很好。展示
  • 如果它不存在,我想“跳转”到
    catch
    view函数

  • 第三点是我不知道如何实现的部分。它似乎应该存在,但我在任何地方都找不到任何类型的“跳转到下一个匹配的视图函数”行为。这可能吗?如果可能,我缺少什么?

    您希望对路由使用条件逻辑-这可能不是路由的最佳点

    然而:

  • 您可以根据条件调用另一个路由,但在某些情况下,此调用和直接路由调用的
    请求
    字段可能不同:

    @app.route('/<slug>')
    def feature(slug):
        if slug_in_database(slug):
            return "feature: " + slug
        return catch(slug)
    
    @app.route('/<path:url>')
    def catch(url):
        return "catch: " + url
    
  • 但我只喜欢条件:

    @app.route('/<path:url>')
    def feature_or_catch(url):
        slug  = url
        if '/' not in slug and slug_in_database(slug):
            return "feature: " + slug
        return "catch: " + url
    
    @app.route(“/”)
    def功能_或_捕获(url):
    slug=url
    如果“/”不在slug中,而slug_在_数据库(slug)中:
    “返回”功能:“+slug”
    返回“catch:+url”
    

  • 谢谢这几乎证实了我在最初的方法中并没有遗漏任何东西——但由于陷入了问题的泥潭,我错过了显而易见的东西。:-)
    @app.route('/<path:url>')
    def feature_or_catch(url):
        slug  = url
        if '/' not in slug and slug_in_database(slug):
            return "feature: " + slug
        return "catch: " + url