Как настроить, куда перенаправлять после выхода из Django?


88

Просто интересно, где я могу установить URL-адрес для перенаправления после выхода из системы. Я знаю, что вы можете установить URL-адрес для входа. Я хочу перенаправить на свою домашнюю страницу.

Ответы:


156

В современном Django (2017+?) Есть настройка под названием LOGOUT_REDIRECT_URL.

Старый Djangos / оригинальный ответ

Вам не нужно ничего перезаписывать или оборачивать.

Согласно документам, вы можете просто указать next_pageаргумент в представлении выхода. https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout

(r'^logout/$', 'django.contrib.auth.views.logout',
                          {'next_page': '/successfully_logged_out/'})

5
Это не сработает, если вы выполнили общий импорт всех URL-адресов авторизации. Легче использовать ответ @ YeRuizhi ниже
RunLoop

@RunLoop Я одобряю этот другой метод. Единственная проблема в том, что вы должны не забывать использовать его каждый раз при создании указанной ссылки. Так что, если это работает в стандартной сборке, это более надежно. Если нет, то имеет смысл следующее простое решение.
Yuji 'Tomita' Tomita

Я не могу понять, как отменить этот URL-адрес.
метеор

Это отличное решение. Я возвращаю его обратно на страницу входа. Есть ли способ добавить системное сообщение через эту строку? чтобы создать всплывающее окно? «Вы успешно вышли из системы»
arcee123

Косая черта в начале URL-адреса «следующей страницы»: «/ success_logged_out /» жизненно важна, без нее Django пытается объединить URL-адрес «выхода из системы» с URL-адресом «success_logged_out», это создает новый «недопустимый» URL. Делает жизнь немного труднее, если вы хотите предоставить пользователям свою страницу входа после выхода из системы.
Rickka 07

60

Один более простой способ:

Добавьте параметр 'next' к URL-адресу запроса на выход. Например:

<a href="{% url 'auth_logout' %}?next=/path_to_the_page"> Logout</a>

Тогда представление выхода сделает свое дело за вас.

Для перенаправления после входа вы можете просто установить его в settings.py:

LOGIN_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'

35
Странно, что нет только свойства LOGOUT_REDIRECT_URL.
Роб Грант


16
У нас 2017 год, и LOGOUT_REDIRECT_URL действительно работает :)
m.antkowicz

Хороший ответ. Воткнул это в мою base.htmlи забыл об этом. : D (Я использую винтажный Django в Debian Jessie: S, поэтому новые настройки недоступны.)
underscore_d


13

Вы можете перенаправить пользователя куда угодно, используя LOGOUT_REDIRECT_URL в вашем файле setting.py

LOGOUT_REDIRECT_URL = 'url name to redirect'

9

Перенаправить на текущую страницу

<a href="{% url 'logout' %}?next={{ request.path | urlencode }}">{% trans "Logout" %}</a>

Протестировано в Django 1.9.

См. Также: Можно ли передать параметры запроса с помощью тега шаблона Django {% url%}?


1
Спасибо, это помогло мне в случае, когда LOGOUT_REDIRECT_URL не сделал (потому что у меня разные пути в тестовой и производственной среде).
Дмитрий Герман


3

Из документации вы можете написать свое собственное представление выхода из системы (которое может быть простой оболочкой), переопределив «следующую» страницу.


3

Вы даже можете использовать именованные URL-адреса для следующего параметра:

<a href="{% url 'auth_logout' %}?next={% url 'homepage' %}"> Logout</a>

3

Если вы хотите установить URL-адрес перенаправления на уровне клиента, вы можете сделать это в urls.py:

(r'^management/logout/$', 'django.contrib.auth.views.logout'),

А потом в шаблоне:

<a href="{% url 'django.contrib.auth.views.logout' %}?next=/">
    Log out
</a>

Где next, вы указываете на правильный URL.


1

Если вы определили свои собственные URL-адреса (а не импортировали общие URL-адреса авторизации) и используете стандартные представления авторизации django, их можно просто добавить (template_name = 'example.html') в путь.

path('logout/',auth_views.LogoutView.as_view(template_name='homepage.html'),name="logout")


0

добавьте это в свой файл project setting.py LOGOUT_REDIRECT_URL = '/'

вы можете написать свой URL-адрес между '' Я использую свою страницу индекса для перенаправления выхода по умолчанию

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.