【问题标题】:Fetching data from server in multiple pages of Flask application在 Flask 应用程序的多个页面中从服务器获取数据
【发布时间】:2017-05-29 21:00:48
【问题描述】:

我正在将 Python 与 Flask 和 Jinja2 一起使用,并且正在尝试实现侧边栏。在 HTML 页面中,我得到了这个:

{% include "sidebar.html" %}

我想要在侧边栏文件中包含最新用户的块。为此,我需要从服务器获取 sidebar.html 文件的结果。但是我应该在 python 文件中的哪里写代码呢?

【问题讨论】:

    标签: python html flask jinja2 sidebar


    【解决方案1】:

    实现此功能的方法是在 python 端创建一个 Jinja 变量:

    app = Flask(__name__)
    
    app.jinja_env.globals.update({
      'latest_users': get_latest_users()
    })
    
    def get_latest_users() {
      return ['Mark', 'Jane', 'Sally']
    }
    

    现在可以从任何 Jinja 模板访问变量 latest_users,只需执行以下操作:

    {% for user in latest_users %}
      <p>{{ user }}</p>
    {% endfor %}
    

    【讨论】:

    • 我是否必须为多个变量多次放置 globals.update 位?
    • app.jinja_env.globals.update() 将字典作为参数,这意味着您可以添加多个键值对。
    【解决方案2】:

    您可以将变量传递给模板。当您使用include 时,您的变量仍然可以在此包含的部分中使用:

    @app.route('/')
    def index():
        users = ['user1', 'user2']
        debug = False
        render_template('index.html', users=users, debug=debug)
    
    # index.html
    {% include "sidebar.html" %}
    
    #sidebar.html
    {% for user in users %}
      <p>{{ user }}</p>
    {% endfor %}
    {{debug}}
    

    【讨论】:

    • 索引中的这些变量是否也适用于其他页面的侧边栏?
    • 是的,但不是index.html,你应该写那个html文件render_template('other.html', users=users, debug=debug)。现在,如果您将sidebar.html 包含在other.html 中,您可以使用此变量usersdebug
    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 2018-01-03
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多