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 permanent
gewijzigd van True naar False. Daarom kunt u deze waarschuwing zien als u het permanent
zoekwoordargument 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