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
相关产品推荐
相关产品推荐

