W dzisiejszym wpisie weźmiemy na tapetę kolejną klasę bazową (Django Base View), którą dostarczają nam twórcy Django: RedirectView.

Klasa RedirectView służy do wykonania przekierowania na podany adres URL. Klasa używa takich atrybutów jak:

  • url: adres przekierowania
  • permanent: służy do poinformowania klasy czy przekierowania ma być permanentne (typu 301), czy tymczasowe (typu 302). Domyślna wartość to True (301).
  • query_string: opcjonalne parametry GET

Przykładowe użycie widoku:

from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView

from articles.models import Article

class ArticleCounterRedirectView(RedirectView):

    permanent = False
    query_string = True
    pattern_name = 'article-detail'

    def get_redirect_url(self, *args, **kwargs):
        article = get_object_or_404(Article, pk=kwargs['pk'])
        article.update_counter()
        return super().get_redirect_url(*args, **kwargs)

Oraz jak to przekazać do funkcji path.

from django.urls import path
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView

urlpatterns = [
    path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'),
]