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
- views.py
- home.html
- 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.
