Dziś bierzemy na warsztat jeden z podstawowych widoków związanych z wyświetlaniem nam konkretnego obiektu na froncie.

DetailView jest to widok, który odpowiada za pobieranie i wyświetlanie obiektu (rekordu z bazy danych) na froncie. Przykład: pobieramy i wyświetlamy post z bloga, wyświetlamy produkt ze sklepu. Tyle.

Idziemy od razu do przykładowego kodu DetailView:

from django.utils import timezone
from django.views.generic.detail import DetailView

from articles.models import Article

class ArticleDetailView(DetailView):

    model = Article
    template_name = 'article.html'

Przekazujemy do widoku model: Article, przekazujemy do widoku szablon artykułu i mamy gotowy widok.

Tworzymy nasz URL do artykułu:

from django.urls import path

from article.views import ArticleDetailView

urlpatterns = [
    path('<slug:slug>/', ArticleDetailView.as_view(), name='article-detail'),
    # alternatywa
    path('<int:pk>/', ArticleDetailView.as_view(), name='article-detail'),
]

Aby wyświetlić nasz artykuł musimy przekazać do ścieżki coś co rozpozna i wyświetli nam ten konkretny post 🙂 np. slug: czyli tzw. ładny adres URL -> zazwyczaj przekazujemy do URL tytuł. Np. “Przykładowy artykuł” -> slug: http://django.pl/przykladowy-artykul/. Alternatywa: przekazanie do URL <pk>, czyli nasz id danego rekordu z tabeli w bazie danych. Np. http://django.pl/1/.

Wyświetlenie tego wszystkiego w naszym szablonie ‘article.html’

<h1>{{ object.title }}</h1>
<p>{{ object.content }}</p>
<p>Reporter: {{ object.author }}</p>
<p>Published: {{ object.pub_date|date }}</p>
<p>Date: {{ now|date }}</p

{{object.title}}, {{object.content}} to po prostu nasze nazwy pól w modelu Article.