前言
首先,如果一个正常的flask带路由的接口,我们是不需要关心上下文对象的,Flask做了很多“魔术”的方法,当一个Flask应用接收到一个请求的时候,它会在将逻辑委托给你的视图函数之前,创建好一个上下文对象。
当我们返回的时候调用render_template(template, **context),就可以正常的渲染界面返回,在这个函数中,如果看一下源码就会发现,返回渲染之前,会创建一个ctx去获得当前环境的app变量。然后通过这个ctx去渲染传进来的context参数列表。
def render_template(template_name_or_list, **context):
"""Renders a template from the template folder with the given
context.
:param template_name_or_list: the name of the template to be
rendered, or an iterable with template names
the first one existing will be rendered
:param context: the variables that should be available in the
context of the template.
"""
ctx = _app_ctx_stack.top
ctx.app.update_template_context(context)
return _render(ctx.app.jinja_env.get_or_select_template(temp