Trong Django, làm cách nào tôi có thể thực hiện chuyển hướng đơn giản trực tiếp từ urls.py? Đương nhiên, tôi là một người có tổ chức tốt, thiên về nguyên tắc DRY, vì vậy tôi muốn có được mục tiêu dựa trên mẫu url được đặt tên của nó, thay vì mã hóa url.
Nếu bạn đang ở trên Django 1.4 hoặc 1.5, bạn có thể làm điều này:
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)),
...
Nếu bạn đang ở trên Django 1.6 trở lên, bạn có thể làm điều này:
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
...
Trong Django 1.9, giá trị mặc định của permanent
đã thay đổi từ Đúng thành Sai. Vì điều này, nếu bạn không chỉ định permanent
đối số từ khóa, bạn có thể thấy cảnh báo này:
RemoveedInDjango19Warning: Giá trị mặc định của 'RedirectView.permanent' sẽ thay đổi từ True thành false trong Django 1.9. Đặt một giá trị rõ ràng để tắt cảnh báo này.
Điều này làm việc cho tôi.
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url='/')),
...
Trong ví dụ trên '/'
có nghĩa là nó sẽ chuyển hướng đến trang chỉ mục, nơi bạn cũng có thể thêm bất kỳ mẫu url nào.
-
1
Chỉ cần lưu ý, hãy nhớ rằng nó
– Bùi Thúy Nga 10:33:31 03/10/2016RedirectView
cópermanent=True
mặc định trong các phiên bản cũ của Django vàpermanent=False
như mặc định trong các phiên bản Django> = 1.9.
Cách này được hỗ trợ trong các phiên bản cũ hơn của django nếu bạn không thể hỗ trợ RedirectView
Trong chế độ xem
def url_redirect(request):
return HttpResponseRedirect("/new_url/")
Trong url.py
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
Bạn có thể làm cho nó vĩnh viễn bằng cách sử dụng HttpResponsePermanentRedirect
cho 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-home', permanent=False)),
path('hola/', include("hola.urls")),
path('admin/', admin.site.urls),
]
Tôi đã cố gắng chuyển hướng tất cả 404 đến trang chủ và những điều sau đây hoạt động rất tốt:
from django.views.generic import RedirectView
...
under urlpatterns, added:
url(r'^.*/$', RedirectView.as_view(url='/home/')),
url(r'^$', RedirectView.as_view(url='/home/')),
Chỉ cần một lưu ý, hãy nhớ rằng RedirectView có vĩnh viễn = Đúng như mặc định.
– Đặng Tuấn Linh 11:32:27 16/06/2014docs.djangoproject.com/en/1.7/ref/group-basing-view/base/iêu
– Trương Lăng 14:16:20 11/02/2015Bạn có thể chuyển hướng mọi thứ! Giống như vậy:
– Tạ Triều Thành 19:20:43 08/05/2015(r'^.*/$', RedirectView.as_view(url='http://newurl.com')),
RedirectView sẽ có vĩnh viễn = Sai như mặc định trong Django 1.9.
– Tạ Mộng Hương 23:29:33 03/07/2015Ai đó có thể giải thích 'my_named_potype' trong ví dụ trên không.
– Tạ Quốc Anh 10:51:37 16/12/2015