Bagaimana mengonfigurasi ke mana mengarahkan ulang setelah keluar di Django?

90

Hanya ingin tahu di mana saya dapat menyetel url untuk dialihkan ke setelah logout. Saya tahu Anda dapat menyetel url login. Saya ingin mengalihkan ke beranda saya.

DJ.MaSs
sumber

Jawaban:

156

Modern Django (2017+?) Memiliki pengaturan yang disebut LOGOUT_REDIRECT_URL.

Djangos Tua / Jawaban Asli

Anda tidak perlu menimpa atau membungkus apa pun.

Menurut dokumen, Anda bisa memasukkan next_pageargumen ke tampilan logout. 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/'})
Yuji 'Tomita' Tomita
sumber
5
Ini tidak berfungsi jika Anda telah melakukan impor generik dari semua url autentikasi. Lebih mudah menggunakan jawaban @ YeRuizhi di bawah ini
RunLoop
@RunLoop Saya menyetujui metode lain ini. Satu-satunya masalah adalah Anda harus ingat untuk menggunakannya setiap kali Anda membangun tautan tersebut. Jadi jika ini berfungsi dalam build standar, ini lebih dapat diandalkan. Jika tidak, maka solusi termudah berikutnya masuk akal.
Yuji 'Tomita' Tomita
saya tidak mengerti cara membalikkan url ini dari tampilan.
meteor
Ini adalah solusi yang luar biasa. Saya mendorongnya kembali ke halaman login. Apakah ada cara untuk menambahkan pesan sistem melalui baris ini juga? untuk membuat popup? "Anda telah berhasil keluar"
arcee123
Garis miring di awal URL 'halaman berikutnya': '/ success_logged_out /' sangat penting, tanpanya, Django mencoba menggabungkan URL "keluar" dengan URL "berhasil_logged_out", ini membuat URL 'ilegal' baru. Membuat hidup sedikit sulit jika Anda ingin menampilkan Halaman Login Anda kepada Pengguna setelah mereka logout.
Rickka
62

Satu cara yang lebih mudah:

Tambahkan parameter 'berikutnya' ke url permintaan keluar Anda. Sebagai contoh:

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

Kemudian tampilan logout akan melakukan triknya untuk Anda.

Untuk after-login-redirect, Anda cukup mengaturnya di settings.py:

LOGIN_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'
YeRuizhi
sumber
35
Aneh bahwa tidak hanya ada properti LOGOUT_REDIRECT_URL.
Rob Grant
16
Kami memiliki 2017 sekarang dan LOGOUT_REDIRECT_URL benar-benar berfungsi :)
m.antkowicz
Jawaban yang bagus. Menempel ini di saya base.htmldan melupakannya. : D (Saya menggunakan Django antik pada Debian Jessie: S jadi pengaturan baru tidak tersedia.)
underscore_d
36

Sejak Django 1.10, anda dapat mendefinisikan a LOGOUT_REDIRECT_URL( lihat dokumen )

edelans
sumber
14

Anda dapat mengarahkan pengguna ke mana saja dengan menggunakan LOGOUT_REDIRECT_URL di file setting.py Anda

LOGOUT_REDIRECT_URL = 'url name to redirect'
SACHIN CHAVAN
sumber
9

Alihkan ke halaman saat ini

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

Diuji di Django 1.9.

Lihat juga: Apakah mungkin untuk melewatkan parameter kueri melalui tag cetakan {% url%} Django?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
1
Terima kasih, ini membantu saya jika LOGOUT_REDIRECT_URL tidak (karena saya memiliki jalur yang berbeda dalam lingkungan pengujian dan produksi).
Dmytro Gierman
4

Dalam tampilan logout Anda, setelah Anda logout pengguna untuk selamanya, kembalikan HttpResponseRedirect (url). Silakan lihat di sini untuk lebih jelasnya .

Ke Sun
sumber
4

Anda bahkan dapat menggunakan url bernama untuk parameter Anda berikutnya:

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

Dari dokumen Anda dapat menulis tampilan logout Anda sendiri (yang dapat berupa pembungkus sederhana) dengan menimpa halaman 'berikutnya'.

Mengenakan
sumber
3

Jika Anda ingin mengatur redirection URL pada level klien, Anda dapat melakukannya di urls.py:

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

Dan kemudian di template:

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

Di mana next, Anda mengarah ke URL yang benar.

Menda
sumber
1

Jika Anda telah menentukan url Anda sendiri (dan tidak mengimpor url autentikasi generik) dan menggunakan tampilan autentikasi django standar, Anda cukup menambahkan (template_name = 'example.html') di jalur.

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

Dcode22
sumber
0

tambahkan ini ke dalam proyek Anda file setting.py LOGOUT_REDIRECT_URL = '/'

Anda dapat menulis URL Anda di antara '' Saya menggunakan halaman indeks saya untuk pengalihan default logout

Emad Mohammadpoor
sumber