112

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.

|
177

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.

|
26

Đ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ó RedirectViewpermanent=Truemặc định trong các phiên bản cũ của Django và permanent=Falsenhư mặc định trong các phiên bản Django> = 1.9.

    – Bùi Thúy Nga 10:33:31 03/10/2016
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

|
6

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),
]
|
5

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

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.