Чтобы остановить перенаправление назад к выходу из системы, когда URL входа в систему заканчивается на? Next=/accounts/logout/ в Django

В моем шаблоне я сейчас использую next параметр для перенаправления пользователя обратно на страницу перед страницей входа с этим:

<a href="{% url auth_login %}?next={% firstof request.path '/' %}">Log in</a>

firstof тег гарантирует, что в случае request.path неверно, то он будет перенаправлен обратно на корневой URL.

Это хорошо работает на каждой странице, кроме одной: страницы выхода из системы. Если бы я захотел сменить пользователя, я бы сначала вышел из системы, затем нажал кнопку "войти". Но тогда мой URL был бы

http://127.0.0.1:8000/accounts/login/?next=/accounts/logout/

Поэтому, как только я войду в систему, я сразу же снова выйду из системы. Как мне изменить шаблон так с помощью такого псевдокода:

if request.path and request.path != reverse( 'auth_logout' )
    return request.path

return "/"

1 ответ

Решение

Самое простое решение, о котором я могу подумать, это добавить "? Next=/" в ваш URL для выхода, таким образом, как только пользователь выйдет из системы, он будет немедленно перенаправлен на указанный URL, поэтому никто никогда не останется в системе. страница при выходе.

В противном случае вам пришлось бы переписать представление входа в систему и добавить любую нужную вам логику, что было бы проще, если бы представления contrib.auth были представлениями класса, что, к сожалению, в настоящее время не так.

Так что скопируйте, вставьте и измените:) (я знаю, что копирование плохо, но это единственный способ, которым вы можете добавить к нему пользовательское поведение).

Представление находится здесь: https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py

Другие вопросы по тегам