我希望导航栏略有不同,具体取决于用户是否已登录。此外,下拉菜单的内容取决于登录的用户。
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
获得用户部分,因为它跨模板的全局性)
答案 0 :(得分:0)
由于您已经在g
上设置了用户,因此您已经拥有了大部分内容。唯一剩下的就是正确设置菜单。
最简单的方法是使用context processor:
@app.context_processor
def provide_menu():
menu = derive_menu_from_global_user()
return {'menu': menu}
然后,每个模板都可以访问menu
变量,其中包含可以迭代的名称列表。