Django – #24 – CRUD cz. 6

Wprowadzenie.

W szóstym wpisie o CRUD nie będziemy zajmować się już samymi operacjami CRUD a jedynie wprowadzimy drobną modyfikację, gdzie pozbędziemy się na sztywno wpisanych id do linków, a wprowadzimy małą automatyzację, która będzie miała za zadanie generować przyciski i skrócone informacje o naszych wpisach.

Zakres artykułu.

  • Automatyzacja wyświetlania rekordów i generowanie przycisków do strony ze szczegółami, edycji i usunięcia danych
  • Testy

Automatyzacja wyświetlania rekordów i generowanie przycisków do strony ze szczegółami, edycji i usunięcia danych

  1. views.py
  2. home.html
  3. base.html

Załóżmy że chcemy, aby nasze wpisy pojawiały się na stronie domowej, dlatego w tym celu zmodyfikujmy funkcję widoku home(request) w pliku views.py. dodajmy zmienną blogs, do której przypiszmy obiekt klasy Blog, gdzie zastosujemy jeszcze metodę sortującą po dacie stworzenia wpisu blogs = Blog.objects.order_by(‘-create_date’). Argument funkcji order_by określa nam po jakim polu chcemy sortować nasze dane, natomiast znak  powoduje, że sortowanie będzie wykonywane w naszym przypadku od najpóźniejszej daty, tak aby najnowsze wpisy znjdowały się na początku strony. Zmienną tą następnie należy przesłać w słowniku do funkcji renderowania jako trzeci argument. 

def home(request):
    blogs = Blog.objects.order_by('-create_date')
    context = {
        'blogs': blogs,
    }
    return render(request, 'crud/home.html', context)

Następnie dane z naszego obiektu musimy zaimplementować na stronie domowej. W tym celu przechodzimy do szablonu home.html i modyfikujemy go następująco.

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

{% block content %}
  <div class="container">
    <h2>HOME</h2><br>
    {% for blog in blogs %}
      <h2>{{ blog.title }}</h2>
      <a class="btn btn-outline-primary" href="{% url 'detail_blog_page' blog.id %}">Zobacz</a>
      <a class="btn btn-outline-primary" href="{% url 'update_blog_page' blog.id %}">Edytuj</a>
      <a class="btn btn-outline-danger" href="{% url 'delete_blog_page' blog.id %}">Usuń</a>
      <h6>{{ blog.body|truncatechars:255 }}</h6>
      <small>{{ blog.create_date }}</small>
      <small>{{ blog.update_date }}</small><br><br>
    {% endfor %}
  </div>
{% endblock %}

W celu wyświetlenia wszystkich wpisów zastosowaliśmy znacznik {%%}, gdzie stworzyliśmy pętlę for. W pętli odnosimy się do kolejnych pól naszej tabeli to jest: blog.title, blog.body, blog.create_date, blog.update_date i blog.id. Warto zauważyć, że w zmiennej blog.body zastosowaliśmy filtr truncatechars:255 co oznacza, że będziemy wyświetlać pierwsze 255 znaków tego pola. W przypadku przycisków Zobacz, Edytuj oraz Usuń zamiast sztywno wpisanego id dodajemy zmienną blog.id, tak aby kolejne przyciski obsługiwały kolejne określone rekordy. Na koniec musimy zrobić porządek w części z naszym paskiem nawigacyjnym.

      <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>
      </nav>

Testy

Przejdźmy teraz do testowania naszej aplikacji. Przejdźmy na naszą stronę startową wpisując w przeglądarce 127.0.0.1:8000. Stwórzmy kilka wpisów wykorzystując do tego przycisk Stwórz. następnie na naszej stronie startowej powinny ukazywać nam się nasze wpisy zgodnie z poniższym zrzutem ekranu. 

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.