Как правильно перенаправить на страницу, зависящую от разных групп пользователей, с помощью django?

Я создаю функцию, позволяющую запрещенному пользователю (пользователю без группы) перейти на определенную страницу banned_alert при нажатии на кнопку "пост", потому что им это запрещено. Но когда я тестирую эту функцию, Chrome показывает This page isn’t working | the IP redirected you too many times. Может кто-нибудь подсказать мне, как правильно это сделать? Может быть, я пропустил какую-то настройку? Ниже приведены мои фрагменты кода. Спасибо за ваше время!

base.html: (has_group функция уже работает правильно в другом месте)

{% load get_group %}
{% if request.user|has_group:"mod" or request.user|has_group:"default" or user.is_staff %}
<a class="nav-link" href="/create-post">Post</a>
{% else %}
<a class="nav-link" href="/banned_alert">Post</a>
{% endif %}

banned_alert.html:

{% extends 'main/base.html' %}
{% block title %}Your account has been banned by Admin{% endblock %}
{% load crispy_forms_tags %}
{% block content %}
<h2>Please contact the Admin!</h2>
{% endblock %}

view.py

def banned_alert(request):
    return redirect('/banned_alert')

urls.py

urlpatterns = [
    path('', views.home, name='home'),
    path('home', views.home, name='home'),
    path('sign-up', views.sign_up, name='sign_up'),
    path('create-post', views.create_post, name='create_post'),
    path('banned_alert', views.banned_alert, name='banned_alert'),
]

У вас есть рекурсия:

это ваш путь

path('banned_alert', views.banned_alert, name='banned_alert'),

  1. Пользователь посещает этот banned_alert путь,
  2. он перенаправляет пользователя на просмотр banned_alert
  3. который перенаправляет пользователя обратно на url banned_alert
  4. и перенаправляет обратно к просмотру banned_alert
  5. reapeat N раз (он не имеет окончания)

Лучший способ запретить пользователя - создать флаг в его модели:

models.py

class User(AbstractUser):
    is_banned = models.BooleanField(default=False)

если вы хотите запретить user, измените поле user's is_banned на true, а затем в вашем шаблоне или представлении проверьте, забанен пользователь или нет, и сделайте вашу логику в соответствии с этим

Кстати, в вашем ulrs.py нужно закрывать пути обратной косой чертой, вот так path('home/', views.home, name='home'),

Вернуться на верх