Wie erstelle ich Liste und Detailansichten für Django-Taggit?
-
25-10-2019 - |
Frage
Ich habe ein ziemlich einfaches Modell, das Django Taggit zum Tagging verwendet.
Alles funktioniert großartig, aber jetzt möchte ich einige Funktionen erweitern und ich bin ein wenig verwirrt.
Was ich will, sind zwei Ansichten.
Eine, die alle meine Tags im System zeigt. Eine, die alle Inhalte aus meiner App mit einem bestimmten Tag zeigt.
Was für mich Sinn macht, ist, für jede Ansicht das Folgende zu tun.
in Blicks.py für MyApp
Alle Tags
von MyApp.models importieren Sie App
von taggit.models import tag tag
Klasse Tagist (ListView):
"" Holen Sie sich alle Tags in der DB "" ""
queryset = Tag.objects.all() template_name = "myapp/TagList.html" paginate_by = 10
Alle Inhalte für ein Tag
von MyApp.models importieren Sie App
von taggit.models import tag tag
Klasse TaggedList (ListView): "" "" "All den Contet für ein Tag" "" ""
template_name = "myapp/TaggedList.html" def get_object(self): return get_list_or_404(App, tag__iexact=self.kwargs['tag'])
Habe ich meinen Verstand verloren oder ist es wirklich so einfach? Übrigens verwende ich generische Klassenansichten.
Danke für die Hilfe. Dave
Lösung
2. Ich glaube, dies ist für die Rückgabe eines einzelnen Objekts, nicht für mehrere Objekte.
def get_object(self):
Stattdessen sollten Sie vielleicht so etwas wie Folgendes ausprobieren:
def get_queryset(self):
return TaggedItem.objects.filter(tag__iexact=self.kwargs['tag'])
Dies gibt eine Liste von Elementen mit genericforeignkeys zurück
Wenn Sie nur an einem bestimmten Modell namens App interessiert sind
return App.objects.filter(tags__name__in=[self.kwargs['tag']])
Die Standardvariablenname in der Vorlage wird dann markiert
{% for item in TaggedItem_list %}
{{item.content_object}} {# generic foreign key here #}
{% endfor %}
Die URLS.Py müsste ähnlich sein wie
url(r'someapp/(?P<tag>\w+)/$', TaggedList.as_view())