2011-11-29 17 views
5

Mam dość prosty model, który używa tagu Django do tagowania.Jak utworzyć widok listy i szczegółów dla django-taggit?

Wszystko działa świetnie, ale teraz chciałbym rozszerzyć niektóre funkcje i jestem nieco zdezorientowany.

Potrzebuję dwóch widoków.

Jeden, który pokazuje wszystkie moje tagi w systemie. Jeden, który pokazuje całą treść z mojej aplikacji z konkretnym tagiem.

Dla mnie sensowne jest wykonanie następujących czynności dla każdego widoku.

w views.py dla MojaApl

  1. Wszystkie Tagi

    z myapp.models importować App

    z taggit.models importować tag

    klasy taglist (ListView):

    "" "Pobierz wszystkie tagi w db" ""

    queryset = Tag.objects.all() 
    template_name = "myapp/TagList.html" 
    paginate_by = 10 
    
  2. Wszystkie treści na Tag

    od myapp.models importować App

    z taggit.models importować tag

    klasy TaggedList (ListView): ""”Get wszystkich Contet for a tag "" "

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

Czy straciłem rozum lub czy to naprawdę takie proste? BTW, używam generycznych widoków klas.

Dzięki za pomoc. Dave

+0

ok, więc pierwszy działa świetnie i tak mogę to zrobić. –

+0

Drugi to nie działa. Otrzymuję błąd całkowity, który mówi mi, że proszę o coś niewłaściwego. –

+0

return get_list_or_404 (App, tags = self.kwargs ['tag']) - to kwerenda, której używam –

Odpowiedz

3

2. Uważam, że jest to za zwrot jednego obiektu, a nie wielu obiektów.

def get_object(self): 

Zamiast być może powinieneś spróbować coś jak następuje:

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

ta zwraca listę elementów z GenericForeignKeys

Jeśli jesteś zainteresowany tylko w konkretnym modelu o nazwie App następnie

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

Domyślna nazwa zmiennej w szablonie to TaggedItem_list następnie

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

Adresy URL.py musiałby być podobny do

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