如何在Flask中从不同蓝图调用方法?

7 投票
1 回答
10433 浏览
提问于 2025-04-17 20:41

我有一个应用程序,里面有多个蓝图模块。

我想在一个蓝图的路由中调用另一个蓝图的一个方法(路由),这个方法通常会返回一个视图或者渲染一个模板。

请问该怎么正确地做到这一点呢?

谢谢。

1 个回答

14

视图其实就是一些函数;你只需要导入这个函数,然后直接调用它,同时传入它可能需要的路由参数。

蓝图的作用是让你更方便地把一组路由注册在一个共同的前缀下,整理它们的模板和静态资源,并处理与这组路由相关的请求事件(比如请求开始、请求完成等)。不过,调用视图的方式并没有改变。

举个例子,如果你在 foo 蓝图中有一个路由,位于 foo.py 模块里:

@foo.route('/bar/<id>')
def bar(id):
    return something_done_with_id(id)

你可以导入这个函数,并在其他地方使用它:

import foo

@baz.route('/spam/ham/eggs'):
def baz():
    return foo.bar(42)

这里的 bar 从网址中获取一个名为 id 的参数,所以在调用这个视图函数时,我们需要传入这个参数的值。

需要注意的是,任何蓝图的 before_requestafter_requestcontext_processor 函数不会被执行(这些是在路由时执行的),蓝图特定的错误处理器也不会生效。

撰写回答