Django模板按用户组显示不同菜单项触发TemplateSyntaxError问题
问题原因
- 模板标签语法错误:Django模板的标签语法要求
{%和标签关键字之间必须保留空格,标签内容和%}之间也需要保留空格。你的代码里多处出现无空格的非法写法,比如{%ifequal、{%endifequal%}、{%endfor%}、{%endif%},这是触发TemplateSyntaxError的直接原因。 - 逻辑隐患:当前用for循环遍历用户组判断身份,如果用户属于多个用户组,会导致菜单重复渲染,逻辑冗余。
修复方案
直接使用优化后的代码即可,既修正了语法错误,也简化了逻辑、减少重复代码:
{% if user.is_authenticated %} <div class="menu"> <button onclick="location.href='http://10.0.0.60:8000/';" class="home en">Home</button> <button onclick="location.href='http://10.0.0.60:8000/news';" class="news en">News</button> <button onclick="location.href='http://10.0.0.60:8000/about';" class="about en">About us</button> {% if user.groups.filter(name='Student').exists %} <!-- 仅学生组可见的菜单 --> <button onclick="location.href='http://10.0.0.60:8000/lessons';" class="home en">Lessons</button> <button onclick="location.href='http://10.0.0.60:8000/assignments';" class="home en">Assignments</button> {% endif %} </div> {% else %} <!-- 未登录用户、Guest组共用菜单 --> <div class="menu"> <button onclick="location.href='http://10.0.0.60:8000/';" class="home en">Home</button> <button onclick="location.href='http://10.0.0.60:8000/news';" class="news en">News</button> <button onclick="location.href='http://10.0.0.60:8000/about';" class="about en">About us</button> </div> {% endif %}
修复说明
- 修正了所有模板标签的空格格式,完全符合Django模板语法规范
- 去掉了冗余的用户组循环逻辑,直接通过
user.groups.filter(name='Student').exists判断用户身份,避免多组用户重复渲染菜单的问题 - 抽离了公共菜单做复用,Guest组和未登录用户菜单一致,不需要单独做判断,减少代码冗余
内容的提问来源于stack exchange,提问作者QanBan
相关产品推荐
相关产品推荐

