Как правильно перенаправить на страницу, зависящую от разных групп пользователей, с помощью 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'),
- Пользователь посещает этот
banned_alert
путь, - он перенаправляет пользователя на просмотр
banned_alert
- который перенаправляет пользователя обратно на url
banned_alert
- и перенаправляет обратно к просмотру
banned_alert
- 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'),