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

88

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

DJ.MaSs
источник

Ответы:

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.
Роб Грант
6
Скоро будет ... docs.djangoproject.com/en/dev/ref/settings/…
Карл,
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>
blueFast
источник
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.

Menda
источник
1

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

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

Dcode22
источник
0

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

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

Эмад Мохаммадпур
источник