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.

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/'})

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'

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


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'



4

Anda bahkan dapat menggunakan url bernama untuk parameter Anda berikutnya:

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

3

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


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.


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")


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.