Python 如何在扩展模板中获取变量

Python 如何在扩展模板中获取变量,python,flask,Python,Flask,我在flask应用程序中制作了一个导航条,位于一个html文件中,该文件扩展到所有其他文件。在导航栏中,我有以下代码: <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="/">Home<

我在flask应用程序中制作了一个导航条,位于一个html文件中,该文件扩展到所有其他文件。在导航栏中,我有以下代码:

<ul class="navbar-nav">
    <li class="nav-item">
        <a class="nav-link active" aria-current="page" href="/">Home</a>
    </li>
    {% if 'user' in session %}
        <li class="nav-item">
            <a class="nav-link" href="/signup">Sign Up</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="/login">Login</a>
        </li>
    {% else %}
        <li class="nav-item">
            <a class="nav-link" href="/logout">Logout</a>
        </li>
    {% endif %}
</ul>
  • {%if会话%中的“用户”}
  • {%else%}
  • {%endif%}

我在flask会话中保存了一个dictionary元素“user”,希望能够将其发送到base.html页面。在其他页面中,我使用
{%extends“base.html”%}
获取导航栏,但是如果我想传递sessions变量,我必须通过base.html文件和扩展它的其他文件发送它。有办法解决这个问题吗?

您正在寻找的是一个上下文处理器。将此函数添加到具有@app.route('/')视图函数的同一文件中,您加载到下面的template_config字典中的所有变量都将在任何template.html文件中可用

# Global HTML template variables.
@app.context_processor
def set_global_html_variable_values():
    if session.get('user'):
        user_in_session = True
    else:
        user_in_session = False
    template_config = {'user_in_session': user_in_session}
    return template_config





(base.html file)
{% if user_in_session %}
    <li class="nav-item">
        <a class="nav-link" href="/signup">Sign Up</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="/login">Login</a>
    </li>
{% else %}
    <li class="nav-item">
        <a class="nav-link" href="/logout">Logout</a>
    </li>
{% endif %}
#全局HTML模板变量。
@app.context\u处理器
def set_global_html_variable_values():
if session.get('user'):
用户会话中的会话=真
其他:
会话中的用户会话=False
template_config={'user_in_session':user_in_session}
返回模板配置
(base.html文件)
{%if用户_在_会话%}
  • {%else%}
  • {%endif%}
    这适用于一般情况。在我的情况下,我只是想让它显示一些navbar元素,如果变量为true。我确实需要.d设置{%if'name'不在会话%}。无需传递。我更新了上面的代码,以显示如何使用上下文处理器为您提供一个布尔变量,然后您可以在base.html模板逻辑中使用该变量。我认为会话变量是自动传递的,因此无需声明它。在我的main.py中,我发现我不需要传递任何变量。我认为代码实际上正在工作,只是我没有将if语句设置为not。很好!我忘记了会话在模板中自动可用。