Reindirizza al modello di url con nome direttamente da urls.py in django?

In Django, come posso eseguire un semplice reindirizzamento direttamente da urls.py? Naturalmente sono un ragazzo ben organizzato, che predilige il principio DRY, quindi mi piacerebbe ottenere il target basato sul suo modello url, piuttosto che codificare l’url.

Se sei su Django 1.4 o 1.5, puoi farlo:

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)), ... 

Se sei su Django 1.6 o successivo, puoi farlo:

 from django.views.generic import RedirectView urlpatterns = patterns('', url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)), ... 

In Django 1.9, il valore predefinito di permanent è cambiato da True a False. Per questo motivo, se non si specifica l’argomento parola chiave permanent , è ansible visualizzare questo avviso:

RemovedInDjango19Warning: il valore predefinito di ‘RedirectView.permanent’ cambierà da True a False in Django 1.9. Impostare un valore esplicito per silenziare questo avviso.

Questo funziona per me.

 from django.views.generic import RedirectView urlpatterns = patterns('', url(r'^some-page/$', RedirectView.as_view(url='/')), ... 

Nell’esempio sopra '/' significa che verrà reindirizzato alla pagina di indice, in cui è ansible aggiungere anche eventuali modelli di URL.

In questo modo è supportato nelle versioni precedenti di Django se non è ansible supportare RedirectView

In view.py

 def url_redirect(request): return HttpResponseRedirect("/new_url/") 

Nella url.py

 url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"), 

Puoi renderlo permanente usando HttpResponsePermanentRedirect

Stavo cercando di redirect tutti gli 404 alla home page e il seguente ha funzionato alla grande:

 from django.views.generic import RedirectView ... under urlpatterns, added: url(r'^.*/$', RedirectView.as_view(url='/home/')), url(r'^$', RedirectView.as_view(url='/home/')), 

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