¿Cómo creo vistas de lista y detalle para Django-Taggit?
-
25-10-2019 - |
Pregunta
Tengo un modelo bastante simple que usa Django Taggit para etiquetar.
Todo funciona muy bien, pero ahora me gustaría expandir alguna funcionalidad y estoy un poco confundido.
Lo que quiero es dos vistas.
Uno que muestra todas mis etiquetas en el sistema. Uno que muestra todo el contenido de mi aplicación con una etiqueta específica.
Lo que tiene sentido para mí es hacer lo siguiente para cada vista.
en las vistas.
Todas las etiquetas
de la aplicación de importación myapp.models
de etiqueta de importación de modelos.
Clase TagList (ListView):
"" "Obtenga todas las etiquetas en el DB" ""
queryset = Tag.objects.all() template_name = "myapp/TagList.html" paginate_by = 10
Todo el contenido para una etiqueta
de la aplicación de importación myapp.models
de etiqueta de importación de modelos.
clase TaggedList (ListView): "" "Obtenga todo el contet para una etiqueta" ""
template_name = "myapp/TaggedList.html" def get_object(self): return get_list_or_404(App, tag__iexact=self.kwargs['tag'])
¿He perdido la cabeza o es realmente tan fácil? Por cierto, estoy usando vistas de clase genérica.
Gracias por la ayuda. Dave
Solución
2. Creo que esto es para devolver un solo objeto, no múltiples objetos.
def get_object(self):
En cambio, tal vez deberías intentar algo como lo siguiente:
def get_queryset(self):
return TaggedItem.objects.filter(tag__iexact=self.kwargs['tag'])
Esto devuelve una lista de elementos con Generic Forebrays
Si solo está interesado en un modelo específico llamado aplicación, entonces
return App.objects.filter(tags__name__in=[self.kwargs['tag']])
El nombre de la variable predeterminado en la plantilla es TagGedItem_List entonces
{% for item in TaggedItem_list %}
{{item.content_object}} {# generic foreign key here #}
{% endfor %}
Las urls.py tendría que ser similar a
url(r'someapp/(?P<tag>\w+)/$', TaggedList.as_view())