Django – #21 – CRUD cz. 3

Wprowadzenie.

W trzeciej części wpisów o CRUD zajmiemy się  wczytywaniem (R – „Read”) zawartości rekordów z bazy danych i ich wyświetlaniem na stronie.

Zakres artykułu.

  • Operacja „R – Read”
  • Testy
 

Operacja „R – Read”

W pierwszym krok przejdźmy do zmodyfikowania pliku urls.py, gdzie dodamy kolejną funkcję path. Funkcja ta wygląda następująco: path(’/', views.DetailBlog_page.as_view(), name=”detail_blog_page”),. W funkcji tej warto zwrócić uwagę na pierwszy argument czyli ’/'. Django na tej konkretnej pozycji będzie oczekiwał zmiennej typu intiger. W przypadku, gdy wpiszemy adres URL  127.0.0.1:8000/4/ Django pobierze numer 4 i przekaże go do funkcji wskazanej w drugim argumencie funkcji path.

from django.contrib import admin
from django.urls import path
from crud import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),

    path('create/', views.CreateBlog_page.as_view(), name="create_blog_page"),
    path('<int:pk>/', views.DetailBlog_page.as_view(), name="detail_blog_page"),
]

W kolejnym kroku przejdźmy do pliku views.py gdzie stworzymy klasę dla widoku odnoszącą się do szczegółów naszego wpisu. Zgodnie z tym co napisaliśmy w funkcji path, nazwa naszej klasy musi nosić nazwę DetailBlog_page() i dziedziczyć po klasie generic.DetailView. Istotne jest to, że widok generyczny odnoszący się do szczegółów automatycznie pobierze zmienną z adresu URL i odpowiednio ją wykorzysta. W naszej klasie należy zdefiniować zmienną model, do której należy przypisać klasę modelu, z którego będziemy chcieli odczytywać dane. Drugą zmienną, którą należy podać jest template_name. Zmienna ta przyjmuje string, który stanowi ścieżkę do szablonu.

class DetailBlog_page(generic.DetailView):
    model = Blog
    template_name = 'crud/detail_page.html'

Następnie należy stworzyć szablon, który będzie wyświetlał szczegóły. Do pól w szablonie odnosimy się poprzez nazwę modelu, a następnie po kropce wpisujemy nazwę konkretnego pola z naszego modelu.

{% extends 'crud/base.html' %}

{% block content %}
  <div class="container">
    <h2>{{ blog.title }}</h2>
    <p>{{ blog.body }}</p>
    <h5>Data utworzenia - {{ blog.create_date }}</h5>
    <h5>Data modyfikacji - {{ blog.update_date }}</h5>
  </div>
{% endblock %}

Na koniec zmodyfikujmy lekko szablon strony bazowej, gdzie na chwilę, w celu przetestowania funkcjonalności do przycisku Zobacz, wpiszmy na stałe odniesienie się do pierwszego rekordu modelu Blog.

<nav class="my-2 my-md-0 mr-md-3">
        <a class="btn btn-outline-primary" href="{% url 'home' %}">HOME</a>
        <a class="btn btn-outline-primary" href="{% url 'create_blog_page' %}">Stwórz</a>
        <a class="btn btn-outline-primary" href="{% url 'detail_blog_page' 1 %}">Zobacz</a>
        <a class="btn btn-outline-primary" href="">Edytuj</a>
        <a class="btn btn-outline-danger" href="">Usuń</a>
</nav>

Testy

Przejdźmy teraz do testowania naszej aplikacji. W pierwszym kroku przejdźmy na naszą stronę startową wpisując w przeglądarce 127.0.0.1:8000

Następnie naciśnijmy na przycisk Zobacz. W przeglądarce powinniśmy zobaczyć następujący adres. 127.0.0.1:8000/1/, a na stronie powinien ukazać nam się nasz wpis, który stworzyliśmy w drugiej części wpisów o CRUD.

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *