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
:ref:``är installerat <enabling-the-sites-framework>`.Lägg till
'django.contrib.redirects'
i inställningenINSTALLED_APPS
.Lägg till
'django.contrib.redirects.middleware.RedirectFallbackMiddleware'
till dinMIDDLEWARE
instä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_path
inte är tom, omdirigeras den tillnew_path
med en 301 (”Moved Permanently”) omdirigering. Du kan underordnaRedirectFallbackMiddleware
och ställa inresponse_redirect_class
tilldjango.http.HttpResponseRedirect
fö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 avRedirectFallbackMiddleware
och åsidosättaresponse_gone_class
och/ellerresponse_redirect_class
.- response_gone_class¶
Klassen
HttpResponse
används när enRedirect
inte 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
HttpResponse
som hanterar omdirigeringen.Standardvärde för
HttpResponsePermanentRedirect
.