如何在Flask中从不同蓝图调用方法?
我有一个应用程序,里面有多个蓝图模块。
我想在一个蓝图的路由中调用另一个蓝图的一个方法(路由),这个方法通常会返回一个视图或者渲染一个模板。
请问该怎么正确地做到这一点呢?
谢谢。
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_request
、after_request
和 context_processor
函数不会被执行(这些是在路由时执行的),蓝图特定的错误处理器也不会生效。