Redirect naar genoemd url-patroon rechtstreeks van urls.py in django?

Hoe kan ik in Django een eenvoudige omleiding rechtstreeks vanuit urls.py uitvoeren? Natuurlijk ben ik een goed georganiseerde man, die voorstander is van het DRY-principe, dus ik zou het doelwit graag willen krijgen op basis van het genoemde url-patroon, in plaats van de url hard te coderen.


Antwoord 1, autoriteit 100%

Als je Django 1.4 of 1.5 gebruikt, kun je dit doen:

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

Als je Django 1.6 of hoger gebruikt, kun je dit doen:

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 is de standaardwaarde van permanentgewijzigd van True naar False. Daarom kunt u deze waarschuwing zien als u het permanentzoekwoordargument niet opgeeft:

RemovedInDjango19Waarschuwing: de standaardwaarde van ‘RedirectView.permanent’ verandert van True naar False in Django 1.9. Stel een expliciete waarde in om deze waarschuwing te dempen.


Antwoord 2, autoriteit 18%

Dit werkt voor mij.

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

In bovenstaand voorbeeld betekent '/'dat het zal doorverwijzen naar de indexpagina,
waar u ook URL-patronen kunt toevoegen.


Antwoord 3, autoriteit 11%

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

Antwoord 4, autoriteit 4%

Deze manier wordt ondersteund in oudere versies van django als je RedirectView niet kunt ondersteunen

In view.py

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

In de url.py

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

Je kunt het permanent maken door HttpResponsePermanentRedirect

te gebruiken


Antwoord 5, autoriteit 4%

Ik probeerde alle 404’s om te leiden naar de startpagina en het volgende werkte prima:

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

Antwoord 6

Je zou rechtstreeks op de urls.py kunnen doen door zoiets te doen als:

url(r'^story/(?P<pk>\d+)/',
        lambda request, pk: HttpResponsePermanentRedirect('/new_story/{pk}'.format(pk=pk)))

Zorg ervoor dat u de nieuwe URL gereed heeft om de omleiding te ontvangen!!
Let ook op het soort omleiding, in het voorbeeld dat ik gebruik Permanente omleiding

Other episodes