Bagaimana cara menyelesaikan redirect sederhana (misalnya cflocation
dalam ColdFusion, atau header(location:http://)
untuk PHP) di Django?
158
Itu mudah:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Info lebih lanjut di dokumen resmi Django
Pembaruan: Django 1.0
Tampaknya ada cara yang lebih baik untuk melakukan ini di Django sekarang menggunakan generic views
.
Contoh -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Ada lebih banyak dalam dokumentasi pandangan umum . Kredit - Carles Barrobés .
Pembaruan # 2: Django 1.3+
Di Django 1.5 redirect_to tidak ada lagi dan telah digantikan oleh RedirectView . Penghargaan untuk Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
daridjango.shortcuts
?('^pattern/$', lambda x: redirect('/redirect/url/'))
Bergantung pada apa yang Anda inginkan (yaitu jika Anda tidak ingin melakukan pra-pemrosesan tambahan), lebih mudah untuk hanya menggunakan
redirect_to
tampilan umum Django :Lihat dokumentasi untuk contoh lebih lanjut.
Untuk Django 1.3+ gunakan:
sumber
Sebenarnya ada cara yang lebih sederhana daripada memiliki tampilan untuk setiap pengalihan - Anda dapat melakukannya secara langsung di
urls.py
:Target dapat berupa callable dan juga string , yang saya gunakan di sini.
sumber
redirect_to
umum yang datang dengan Django masih lebih sederhana dan lebih mudah dibaca. Lihat Carles jawab stackoverflow.com/questions/523356/python-django-page-redirect/…Sejak Django 1.1, Anda juga dapat menggunakan pintasan pengalihan yang lebih sederhana :
Itu juga membutuhkan argumen permanen = true keyword opsional.
sumber
Jika Anda ingin mengarahkan seluruh subfolder,
url
argumen di RedirectView sebenarnya diinterpolasi , sehingga Anda dapat melakukan sesuatu seperti ini diurls.py
:Hasil
?P<path>
tangkapan Anda akan dimasukkanRedirectView
. Variabel yang diambil ini kemudian akan diganti dalamurl
argumen yang Anda berikan, memberi kami/new_path/yay/mypath
jika jalur awal Anda/old/yay/mypath
.Anda juga dapat melakukannya
….as_view(url='…', query_string=True)
jika Anda ingin menyalin string kueri juga.sumber
Dengan Django versi 1.3, pendekatan berbasis kelas adalah:
Contoh ini hidup di dalam urls.py
sumber
Awas. Saya melakukan ini pada server pengembangan dan ingin mengubahnya nanti.
Saya harus menghapus cache untuk mengubahnya. Untuk menghindari goresan kepala ini di masa depan, saya bisa membuatnya sementara seperti:
sumber
Anda dapat melakukan ini di bagian Admin. Itu dijelaskan dalam dokumentasi.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
sumber
page_path = define di urls.py
sumber
Ini seharusnya bekerja di sebagian besar versi Django, saya menggunakannya di 1.6.5:
Anda masih dapat menggunakan nama pola url alih-alih url kode keras dengan solusi ini. Parameter location_id dari url diturunkan ke fungsi lambda.
sumber