【问题标题】:Flask pass data to child templateFlask 将数据传递给子模板
【发布时间】:2014-07-15 19:39:24
【问题描述】:

我希望根据用户是否登录有一个稍微不同的导航栏。此外,下拉菜单的内容将取决于登录的用户。

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 获取用户部分,因为它是跨模板全局的)

【问题讨论】:

  • 你试过了吗?你遇到了什么问题?
  • @dirn 不知道你在问什么。我想知道如何将数据传递给子模板。我遇到的问题是不知道该怎么做
  • 我在问您是否尝试过任何方法,如果尝试过,您遇到了什么问题。

标签: python twitter-bootstrap flask jinja2


【解决方案1】:

由于您已经在g 上设置了用户,因此您已经拥有了大部分您需要的东西。剩下的就是正确设置菜单了。

最简单的做法是使用context processor

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2017-12-29
    • 2011-03-13
    • 2023-01-11
    相关资源
    最近更新 更多