Flask 将数据传递给子模板
我想根据用户是否登录来显示稍微不同的导航栏。此外,下拉菜单的内容也会根据登录的用户而变化。
views.py
文件:
@app.route('/table')
def my_table:
return render_template("table.html",
user = user,
my_names = my_names)
应用中的一个页面(/table
):
{% extends "navbar.html" %}
{% block content %}
<html> A bunch of stuff </html>
简化的导航栏模板:
{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block navbar %}
<html>
<nav class="navbar navbar-default" role="navigation">
<ul class="dropdown-menu" role="menu">
<li><a href="#"> Signed in as: {{ user }} </a></li>
<li class="divider"></li>
{% for name in my_names %}
<li><a href="#"> {{ name }} </a></li>
{% endfor %}
</html>
{% endblock %}
我想把 user
和 my_names
传递给导航栏模板。这两个数据会根据登录的用户而变化。
我这样想对吗?我的结构还好吗?我应该使用一些东西来简化这个过程吗(比如 Blueprints
)?
(我知道可以通过 g.user
获取用户信息,因为它在所有模板中都是全局的)
1 个回答
0
因为你已经在g
中设置了用户,所以你已经有了大部分需要的内容。剩下的就是正确设置菜单。
最简单的方法是使用一个上下文处理器:
@app.context_processor
def provide_menu():
menu = derive_menu_from_global_user()
return {'menu': menu}
这样每个模板都会有一个menu
变量,这个变量包含一个名字列表,你可以对这个列表进行遍历。