ใน Django ฉันจะเปลี่ยนเส้นทางง่ายๆโดยตรงจาก urls.py ได้อย่างไร โดยปกติแล้วฉันเป็นคนที่มีระเบียบเรียบร้อยชอบหลักการ DRY ดังนั้นฉันจึงต้องการได้รับเป้าหมายตามรูปแบบ URL ที่ตั้งชื่อไว้แทนที่จะเข้ารหัส URL ยาก
ใน Django ฉันจะเปลี่ยนเส้นทางง่ายๆโดยตรงจาก urls.py ได้อย่างไร โดยปกติแล้วฉันเป็นคนที่มีระเบียบเรียบร้อยชอบหลักการ DRY ดังนั้นฉันจึงต้องการได้รับเป้าหมายตามรูปแบบ URL ที่ตั้งชื่อไว้แทนที่จะเข้ารหัส URL ยาก
คำตอบ:
หากคุณใช้ Django 1.4 หรือ 1.5 คุณสามารถทำได้:
from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url=reverse_lazy('my_named_pattern'), permanent=False)),
...
หากคุณใช้ Django 1.6 ขึ้นไปคุณสามารถทำได้:
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
...
ใน Django 1.9 ค่าเริ่มต้นของpermanent
ได้เปลี่ยนจาก True เป็น False ด้วยเหตุนี้หากคุณไม่ระบุpermanent
อาร์กิวเมนต์คำหลักคุณอาจเห็นคำเตือนนี้:
RemovedInDjango19Warning: ค่าเริ่มต้นของ 'RedirectView.permanent' จะเปลี่ยนจาก True เป็น False ใน Django 1.9 ตั้งค่าที่ชัดเจนเพื่อปิดเสียงคำเตือนนี้
(r'^.*/$', RedirectView.as_view(url='http://newurl.com')),
pattern_name
อาร์กิวเมนต์เพื่อRedirectView
ดำเนินการย้อนกลับสำหรับคุณในเวลาโทรโดยใช้ชื่อรูปแบบที่กำหนด อื่น ๆพารามิเตอร์ที่มีประโยชน์รวมpermanent
query_string
และ
สิ่งนี้ใช้ได้กับฉัน
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url='/')),
...
ในตัวอย่างข้างต้น'/'
หมายความว่ามันจะเปลี่ยนเส้นทางไปยังหน้าดัชนีซึ่งคุณสามารถเพิ่มรูปแบบ URL ได้ด้วย
RedirectView
มีpermanent=True
เป็นค่าเริ่มต้นใน Django เวอร์ชันเก่าและpermanent=False
เป็นค่าเริ่มต้นในเวอร์ชัน Django> = 1.9
สำหรับ django v2 +
from django.contrib import admin
from django.shortcuts import redirect
from django.urls import path, include
urlpatterns = [
# this example uses named URL 'hola-home' from app named hola
# for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
path('', lambda request: redirect('hola/', permanent=False)),
path('hola/', include("hola.urls")),
path('admin/', admin.site.urls),
]
permanent=False
เป็นค่าเริ่มต้น สำหรับรายละเอียดเพิ่มเติมโปรดอ่าน: docs.djangoproject.com/en/2.1/topics/http/shortcuts/#redirect developer.mozilla.org/en-US/docs/Web/HTTP/…
วิธีนี้ได้รับการสนับสนุนใน django เวอร์ชันเก่าหากคุณไม่สามารถรองรับ RedirectView
ใน view.py
def url_redirect(request):
return HttpResponseRedirect("/new_url/")
ใน url.py
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
คุณสามารถทำให้ถาวรได้โดยใช้ HttpResponsePermanentRedirect
ฉันพยายามเปลี่ยนเส้นทาง 404 ทั้งหมดไปยังโฮมเพจและสิ่งต่อไปนี้ใช้งานได้ดี:
from django.views.generic import RedirectView
...
under urlpatterns, added:
url(r'^.*/$', RedirectView.as_view(url='/home/')),
url(r'^$', RedirectView.as_view(url='/home/')),