Jak wykorzystać generyczne widoki w praktyce? Mamy już widok listujący notatki, teraz czas na szczegóły notatki.

W tym celu wykorzystamy model Note, który utworzyliśmy podczas pisania pierwszej aplikacji.

Nasz aktualny model wygląda tak:

class Note(models.Model):
    title = models.CharField(max_length=256)
    body = models.TextField()

Najprostsza wersja widoku może dla niego wygladać w ten sposób

#plik: notes/views.py
from django.views.generic import ListView

from notes.models import Note


class NoteDetailView(DetailView):
    model = Note

Aby z niego skorzystać musimy utworzyć odpowiedni adres url

from django.conf.urls import url

from notes.views import NoteListView

urlpatterns = [
    url(r'^(?P<pk>\d+)/$', NoteDetailView.as_view(), name='note-detail'),
]

TODO: link do postu o URL'ach

Zmieniamy co nieco plik notes/templates/note_list.html

<h1>Notes</h1>
<ul>
{% for note in object_list %}
    <li><a href="{% url 'note-detail' note.pk %}">{{ note.title }}</a></li>
{% empty %}
    <li>No notes yet.</li>
{% endfor %}
</ul>

TODO: link do tagach w template

Nasz widok domyślnie będzie szukał szablonu odpowiedzialnego za wyświetlanie danych w pliku notes/templates/note_detail.html

<h1>{{ note.title }}</h1>
<p>{{ note.body }}</p>

Musimy oczywiście pamietac, jeśli nie zrobilismy tego wcześniej, o podpięciu adresów z aplikacji do projektu, a więc zmieniay w pliku notes/urls.py

from django.conf.urls import url, include
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^notes/', include('notes.urls')),
]

TODO: link do przestrzeniach nazw w adresach

Uruchamiamy aplikację i przechodzimy na stronę http://127.0.0.1:8000/notes/

W kolejnym wpisie postaram się przytoczyć nieco skomplikowaną a co za tym idzie dającą więcej możliwości wersję widoku bazującego na generycznym DetailView.

Currently unrated
  • Share