Django为不同的组模板不同的项目。用户身份验证和组隔离

Posted

技术标签:

【中文标题】Django为不同的组模板不同的项目。用户身份验证和组隔离【英文标题】:Django template different items for different groups. User authentication and group segregations 【发布时间】:2021-12-25 18:00:31 【问题描述】:

所以我正在尝试制作一个像网站一样的教室,但这仅适用于我认识的人正在运行的课程。我希望不同的群体对网站有不同的看法。例如组“Guest”看不到菜单项组“Student”可以看到。但它不太有效......这是我的菜单代码:

      % if user.is_authenticated %

      % for group in user.groups.all %

      % ifequal group.name 'Student' %

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

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

      </div>

      % endifequal %

      %ifequal group.name 'Guest'%

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

      %endifequal%

      %endfor%

      %else%

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

但上面也引发了错误。

TemplateSyntaxError at /assignments
Unexpected end of expression in if tag.

以下是有关该错误的更多信息:

Request Method: GET
Request URL:    http://10.0.0.60:8000/assignments
Django Version: 3.2.7
Exception Type: TemplateSyntaxError
Exception Value:    
Unexpected end of expression in if tag.
Exception Location: /home/*****/.local/lib/python3.9/site-packages/django/template/smartif.py, line 144, in nud
Python Executable:  /usr/bin/python3
Python Version: 3.9.5

【问题讨论】:

【参考方案1】:

这里是如何做到这一点。我不知道为什么这行得通,而上面的那个不行,但它就是这样。但我认为你必须指定每个条件而不是使用 else

代码:

% if user.is_authenticated %

      % for group in user.groups.all %

      % ifequal group.name 'Student' %

      <div class="menu">
          "items for group student"

      </div>

      % endifequal %

      %ifequal group.name 'Guest'%

        <div class="menu">
          "items for group Guest"
      </div>

      %endifequal%

      %endfor%

      %elif not user.is_authenticated%

      <div class="menu">
          "items for anonymous users"
      </div>

      %endif%

【讨论】:

以上是关于Django为不同的组模板不同的项目。用户身份验证和组隔离的主要内容,如果未能解决你的问题,请参考以下文章

更改 URL 中的顺序(身份验证/注册)导致的不同模板使用

用户身份验证与会话身份验证有何不同

在Django中定制身份验证

使用两种不同服务的 JWT 身份验证

Django 基于状态的多重身份验证后端

用户身份验证模板标签不起作用-Django