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

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 %}

修复说明

  1. 修正了所有模板标签的空格格式,完全符合Django模板语法规范
  2. 去掉了冗余的用户组循环逻辑,直接通过user.groups.filter(name='Student').exists判断用户身份,避免多组用户重复渲染菜单的问题
  3. 抽离了公共菜单做复用,Guest组和未登录用户菜单一致,不需要单独做判断,减少代码冗余

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:04