You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中Jinja2模板菜单权限控制逻辑异常求助

Jinja2菜单显示逻辑问题修复

你的核心问题出在elif分支的逻辑判断上:当前的(item.tag != "Account" or item.tag != "Admin")条件永远为真——不管菜单项是Account还是Admin,总有一个“不等于”的条件成立,所以无session时这两个项还是会匹配该分支并显示出来。

修正方案

将elif的判断条件从or改为and,这样只有既不是Account也不是Admin的菜单项,才会在无session时被渲染;而Account和Admin在无session时会因不满足任何分支条件而被排除。

修正后的完整代码

{% if headerinf.nav %}
    {% for item in headerinf.nav %}
        {% if item.tag == "Home" %}
        <li class="nav-item">
            <a class="nav-link active" aria-current="page" href="{{ item.url }}">*{{ item.tag }}</a>
        </li>
        {% else %}
            {% if (item.tag == "Account" or item.tag == "Admin") and session %}
            <li class="nav-item">
                <a class="nav-link" href="{{ item.url }}">#{{ item.tag }}</a>
            </li>
            {% elif (item.tag != "Account" and item.tag != "Admin")%}
            <li class="nav-item">
                <a class="nav-link" href="{{ item.url }}">&{{ item.tag }}</a>
            </li>
            {% endif %}
        {% endif %}
    {% endfor %}
{% else %}
<li class="nav-item active">
    <a class="nav-link" href=" ">Nav list missing</a>
</li>
{% endif %}

逻辑说明

  • 当session存在时:Account/Admin会匹配第一个if分支显示;其他非Home项匹配elif分支显示。
  • 当session不存在时:Account/Admin不满足任何分支条件,不会被渲染;其他非Home项匹配elif分支显示。

内容的提问来源于stack exchange,提问作者davetayl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:13:14