Flask将数据传递给子模板

时间:2014-07-15 19:39:25

标签: python twitter-bootstrap flask jinja2

我希望导航栏略有不同,具体取决于用户是否已登录。此外,下拉菜单的内容取决于登录的用户。

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 %}

我想将usermy_names传递给导航栏模板。这两个数据的变化取决于谁登录。

我是否正确地考虑过这个问题?我的结构好吗?我应该使用什么来简化这个(比如Blueprints)吗?

(我知道我可以通过g.user获得用户部分,因为它跨模板的全局性)

1 个答案:

答案 0 :(得分:0)

由于您已经在g上设置了用户,因此您已经拥有了大部分内容。唯一剩下的就是正确设置菜单。

最简单的方法是使用context processor

@app.context_processor
def provide_menu():
    menu = derive_menu_from_global_user()
    return {'menu': menu}

然后,每个模板都可以访问menu变量,其中包含可以迭代的名称列表。