Ich hatte Schwierigkeiten, ListViews wie erwartet auf einem Blog-Projekt, an dem ich arbeite, zu rendern.Verwenden von get_queryset() -Methode in ListView, Django 1.9
Ich habe einen Tag-Modell, das Teil eines Post-Modell ist wie folgt (von meinem Beitrag Modell in models.py):
class Post(models.Model):
(...)
tags = models.ManyToManyField(Tag)
TagListView in views.py
sich wie folgt:
class TagListView(ListView):
def get_queryset(self):
slug = self.kwargs['slug']
try:
tag = Tag.objects.get(slug=slug)
return tag.post_set.all()
except Tag.DoesNotExist:
return Post.objects.none()
wie folgt
Das ist die uRL wie folgt (die im Projekt enthalten ist, wie wenn url(r'^blog/?', include('blog.urls')),
ist:
url(r'^tag/(?P<slug>[a-zA-Z0-9-]+)?/?$', TagListView.as_view(
paginate_by=5,
model=Tag,
)),
Von dem, was ich verstehe, ruft der Zugriff auf eine URL, die in diesem Beispiel localhost:8000/blog/tag/<name-of-tag-here>
sein sollte, TagListView in views.py auf, das dann die get_queryset()
-Methode verwendet, um eine ListView von Posts mit einem Tag mit demselben Slug zu erstellen. die dann nach einer Vorlage sucht (um /blog/templates/blog
), die in der Anleitung, die ich gerade betrachte, heißt tag_post_list.html
, aber - die Dokumentation ist unklar, wie die ListView eine Vorlage zum Rendern findet und ich verfolge einfach ein veraltetes Tutorial .
Ich bin ein wenig verwirrt darüber, welche Variablen in die HTML-Vorlage übergeben werden und wie Sie darauf zugreifen. Aus den Ergebnissen geht hervor, dass get_queryset()
nicht wirklich nur Beiträge mit der gleichen Tag-Liste zurückgibt. Furthermore, my css isn't rendering, either (which I've made a separate post for), obwohl es offensichtlich ist, dass andere Tags und Elemente aus meiner base.html
Datei sind.
Die Vorlage beginnt {% extends 'base.html' %}
(die sich in /blog/templates/
befindet) und greift auf Beiträge über {% for post in object_list %}
zu. object_list
enthält offensichtlich nicht, was ich denke, dass es sollte, was, soweit ich verstehe, wegen der Art und Weise sein sollte, die ich ListView get_queryset()
Methode missbrauche.
Danke.
Hier fehlt ein Debugging. Haben Sie sichergestellt, dass diese Sicht tatsächlich aufgerufen wird? Hast du sichergestellt, dass das Slug-Argument korrekt ist? Geht der Code in 'get_queryset'?Haben Sie untersucht, was von dieser Methode zurückgegeben wird? Sie können all dies mit dem Debugger machen oder einfach durch das Eingeben von Druckanweisungen sind die relevanten Punkte. –
Abgesehen von allem anderen ist dies eine Liste von Posts, nicht von Tags, also sollte das Modell Post sein. Das würde jedoch nichts bewirken. –
Was enthält 'object_list' eigentlich? Nichts? Etwas anderes? – YPCrumble