Jinja2和Flask:将变量传递给父模板而不将其传递给子模板

rob*_*uan 5 python variables templates jinja2 flask

假设我有一个带有标题的基本模板,并且该标题的内容需要传递到模板中.

<header>
  You are logged in as {{ name }}
</header>
Run Code Online (Sandbox Code Playgroud)

此基本模板扩展了许多页面.如何传递该变量而不将其传递给每个孩子?例如,我不想这样做:

render_template("child1.html", name=user.name)
render_template("child2.html", name=user.name)
render_template("child3.html", name=user.name)
etc...
Run Code Online (Sandbox Code Playgroud)

因为谁知道我可能有多少个子页面.它感觉不够干燥.

我从来没有实际渲染基本模板,只有它的子项,但我不知道如何传递数据.

有没有办法做到这一点?我不应该使用继承吗?

cod*_*eek 12

我建议你在烧瓶中使用全局变量'g'.默认情况下,这在jinja模板中可用.因此,您无需担心将其传递到基本模板或子项中的任何位置.请确保在登录时首先进行设置

g.username = user.name
Run Code Online (Sandbox Code Playgroud)

然后在模板中,只需这样做:

You are logged in as {{ g.username }}
Run Code Online (Sandbox Code Playgroud)