Ich habe vor kurzem angefangen Python und Django zu lernen und bisher läuft es ganz gut. Die Dokus und Foreneinträge mit häufigen Fehlern/Fragen helfen sehr.
Allerdings hab ich manchmal einfach kleine Hänger, weil mir wohl einfach noch die langjährige Programmiererfahrung fehlt. Ich bin gerade an so nem Hängern angekommen und verstehe einfach nicht wo mein Hirn genau hängt.
Erstmal mein Code: (ist aus einem O'Reilly Tutorial)
urls.py:
Code: Alles auswählen
from django.conf.urls import url
from django.contrib import admin
from books.views import list_books
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', list_books, name="books"),
]
Code: Alles auswählen
from django.shortcuts import render
from .models import Book
def list_books(request):
"""
List the books that have reviews
"""
books = Book.objects.exclude(date_reviewed__isnull = True)
context = {"books":books}
return render(request, "list.html", context)
Code: Alles auswählen
class Book(models.Model):
title = models.CharField(max_length=150)
authors = models.ManyToManyField("Author", related_name="books")
review = models.TextField(blank=True, null=True)
date_reviewed = models.DateTimeField(blank=True, null=True)
is_favourite = models.BooleanField(default=False, verbose_name="Favorite?")
Code: Alles auswählen
<main>
<h1>{{ books.count }} books</h1>
</main>
1.a. views.py: Warum der "Umweg" über die Variable "context"?
Liefert books = Book.objects.exclude(date_reviewed__isnull = True) nicht eh schon eine List mit allen Büchern?
Ich kann doch in der Django Shell schreiben:
books=Book.objects.exclude(date_reviewed__isnull = True) und dann mit
books[0].title, books[1].title etc durchiterieren
1.b. Und selbst wenn ich es über "context" mache:
Wieso reicht da ein einfaches context = {"books":books} ?
Müsste ich da nicht für jedes einzelne Buch einmal durchiterieren? Also sowas wie for book in books? Das muss ich doch sonst auch immer so machen?
Bzw anders gefragt, worin liegt er Vorteil darin ein Dictionary zu haben das so aussieht:
"books": infos_zu_buch1, Infos_zu_buch2, ...
anstatt eine List zu haben die so aussieht:
infos_zu_buch1, Infos_zu_buch2, ...
Was genau bringt es mir hier ein dictionary zu haben anstatt einer List?
Das ist es doch was der Umweg über context bringt oder?
2. Woher genau kommt die Bezeichnungs "books" in {{ books.count }}?
Wenn das Dictionary "context" übergeben wird, dann müsste es doch context["books"].count heissen???
Das mögen für Euch sicher die peinlichsten Anfängerfehler sein, aber ich hab mir das jetzt schon echt lange überlegt und ich verstehe es einfach nicht.
Vielleicht kann ja jemand von Euch den/die Knoten lösen.
Vielen Dank schonmal!!