2011-11-29 10 views
5

Tengo un modelo bastante simple que usa Django Taggit para etiquetar.¿Cómo creo vistas de lista y de detalles para django-taggit?

Todo funciona muy bien, pero ahora me gustaría ampliar algunas funciones y estoy un poco confundido.

Lo que quiero son 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 views.py para miaplicacion

  1. todas las etiquetas

    de myapp.models importar App

    de taggit.models importar Tag

    taglist clase (Lista):

    "" "Obtener todas las etiquetas en el db" ""

    queryset = Tag.objects.all() 
    template_name = "myapp/TagList.html" 
    paginate_by = 10 
    
  2. Todo el contenido de una etiqueta

    de myapp.models importar App

    de taggit.models importar Tag

    TaggedList clase (Lista): """ Obtener toda la 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 realmente es así de fácil? Por cierto, estoy usando vistas genéricas de clase.

Gracias por la ayuda. Dave

+0

bien, así que la primera funciona muy bien, y así es como puedo hacerlo. –

+0

El segundo no es trabajo. Recibo un error de enteros que me dice que estoy pidiendo algo equivocado. –

+0

return get_list_or_404 (App, tags = self.kwargs ['tag']) - esa es la consulta que estoy usando –

Respuesta

3

2. Creo que esto es para devolver un solo objeto, no múltiples objetos.

def get_object(self): 

lugar tal vez debería intentar algo así como lo siguiente:

def get_queryset(self): 
    return TaggedItem.objects.filter(tag__iexact=self.kwargs['tag']) 

Esto devuelve una lista de artículos con GenericForeignKeys

Si sólo está interesado en un modelo específico denominado Aplicación continuación

return App.objects.filter(tags__name__in=[self.kwargs['tag']]) 

El nombre de la variable predeterminada en la plantilla es TaggedItem_list luego

{% 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()) 
Cuestiones relacionadas