Appen för omdirigeringar¶
Django levereras med en valfri redirects-applikation. Den låter dig lagra omdirigeringar i en databas och hanterar omdirigeringen åt dig. Den använder HTTP-svarsstatuskoden 301 Moved Permanently som standard.
Installation¶
Följ dessa steg för att installera appen Redirects:
Se till att ramverket
django.contrib.sitesär installerat.Lägg till
'django.contrib.redirects'i inställningenINSTALLED_APPS.Lägg till
'django.contrib.redirects.middleware.RedirectFallbackMiddleware'till dinMIDDLEWAREinställning.Kör kommandot
manage.py migrate.
Hur det fungerar¶
manage.py migrate skapar en django_redirect tabell i din databas. Detta är en uppslagstabell med fälten site_id, old_path och new_path.
RedirectFallbackMiddleware gör allt arbete. Varje gång en Django-applikation ger upphov till ett 404-fel kontrollerar denna middleware omdirigeringsdatabasen för den begärda webbadressen som en sista utväg. Specifikt söker det efter en omdirigering med den givna old_path med ett webbplats-ID som motsvarar inställningen SITE_ID.
Om den hittar en matchning och
new_pathinte är tom, omdirigeras den tillnew_pathmed en 301 (”Moved Permanently”) omdirigering. Du kan underordnaRedirectFallbackMiddlewareoch ställa inresponse_redirect_classtilldjango.http.HttpResponseRedirectför att använda en302 Moved Temporarily-omdirigering istället.Om den hittar en matchning och
new_pathär tom, skickar den en 410 (”Gone”) HTTP-header och ett tomt (innehållslöst) svar.Om den inte hittar någon matchning fortsätter begäran att behandlas som vanligt.
Middleware aktiveras endast för 404:or - inte för 500:or eller svar med någon annan statuskod.
Observera att ordningen på MIDDLEWARE spelar roll. I allmänhet kan du sätta RedirectFallbackMiddleware i slutet av listan, eftersom det är en sista utväg.
Mer information om middleware finns i middleware docs.
Så här lägger du till, ändrar och tar bort omdirigeringar¶
Via administratörsgränssnittet¶
Om du har aktiverat det automatiska Django-administratörsgränssnittet bör du se ett avsnitt ”Omdirigeringar” på adminindexsidan. Redigera omdirigeringar som du redigerar alla andra objekt i systemet.
Via Python API¶
- class models.Redirect¶
Redirects representeras av en standard Django model, som finns i django/contrib/redirects/models.py. Du kan komma åt omdirigeringsobjekt via Django databas API. Till exempel:
>>> from django.conf import settings >>> from django.contrib.redirects.models import Redirect >>> # Add a new redirect. >>> redirect = Redirect.objects.create( ... site_id=1, ... old_path="/contact-us/", ... new_path="/contact/", ... ) >>> # Change a redirect. >>> redirect.new_path = "/contact-details/" >>> redirect.save() >>> redirect <Redirect: /contact-us/ ---> /contact-details/> >>> # Delete a redirect. >>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete() (1, {'redirects.Redirect': 1})
Middleware¶
- class middleware.RedirectFallbackMiddleware¶
Du kan ändra
HttpResponse-klasserna som används av middleware genom att skapa en underklass avRedirectFallbackMiddlewareoch åsidosättaresponse_gone_classoch/ellerresponse_redirect_class.- response_gone_class¶
Klassen
HttpResponseanvänds när enRedirectinte hittas för den begärda sökvägen eller har ett tomtnew_path-värde.Standardvärde för
HttpResponseGone.
- response_redirect_class¶
Klassen
HttpResponsesom hanterar omdirigeringen.Standardvärde för
HttpResponsePermanentRedirect.