Як налаштувати куди переспрямовувати після виходу з системи в Django?


88

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

Відповіді:


156

Сучасний Django (2017+?) Має налаштування під назвою LOGOUT_REDIRECT_URL.

Старі Джанго / Оригінальна відповідь

Вам не потрібно нічого перезаписувати чи обгортати.

Згідно з документами, ви можете просто надати 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-адреси "наступної сторінки": "/ успішно_зареєстрований_вихід /" є життєво важливою, без неї Django намагається об'єднати URL-адресу "виходу" з URL-адресою "успішно_законченого_виходу", це створює нову "незаконну" URL-адресу. Ускладнює життя, якщо ви хочете подарувати Користувачам свою сторінку входу після виходу з системи.
Рікка

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 у файлі settings.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 auth, їх ви можете просто додати (template_name = 'example.html') у шлях.

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


0

додайте це у файл проекту setting.py LOGOUT_REDIRECT_URL = '/'

Ви можете написати свою URL-адресу між '' Я використовую свою індексну сторінку для перенаправлення за замовчуванням

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.