2011-11-29 15 views
5

Ho un modello abbastanza semplice che utilizza Django Taggit per il tagging.Come posso creare viste elenco e dettagli per django-taggit?

Tutto funziona alla grande, ma ora mi piacerebbe espandere alcune funzionalità e sono un po 'confuso.

Quello che voglio sono due viste.

Uno che mostra tutti i miei tag nel sistema. Uno che mostra tutti i contenuti della mia app con un tag specifico.

Ciò che per me ha senso è eseguire quanto segue per ciascuna vista.

in views.py per myapp

  1. tutti i Tag

    da myapp.models importare App

    da taggit.models importare Tag

    classe TagList (ListView):

    "" "Ottieni tutti i tag nel db" ""

    queryset = Tag.objects.all() 
    template_name = "myapp/TagList.html" 
    paginate_by = 10 
    
  2. Tutti i contenuti di un tag

    da myapp.models importare App

    da taggit.models importare Tag

    classe TaggedList (ListView): """ Ottenere tutte le contet per un tag "" "

    template_name = "myapp/TaggedList.html" 
    
    def get_object(self): 
        return get_list_or_404(App, tag__iexact=self.kwargs['tag']) 
    

Ho perso la testa o è davvero così facile? A proposito, sto usando viste di classe generiche.

Grazie per l'aiuto. Dave

+0

ok, quindi il primo funziona alla grande, ed è così che posso farlo. –

+0

Il secondo non funziona. Sto ricevendo un errore intero che mi dice che sto chiedendo la cosa sbagliata. –

+0

return get_list_or_404 (App, tags = self.kwargs ['tag']) - questa è la query che sto usando –

risposta

3

2. Credo che questo sia per restituire un singolo oggetto, non più oggetti.

def get_object(self): 

Invece forse si dovrebbe provare qualcosa di simile al seguente:

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

Questo restituisce un elenco di elementi con GenericForeignKeys

Se si è interessati solo in un modello specifico chiamato App poi

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

Il nome della variabile di default nel modello è TaggedItem_list quindi

{% for item in TaggedItem_list %} 
    {{item.content_object}} {# generic foreign key here #} 
{% endfor %} 

Gli indirizzi.py dovrebbe essere simile a

url(r'someapp/(?P<tag>\w+)/$', TaggedList.as_view()) 
Problemi correlati