2011-11-29 26 views
5

Tôi có một mô hình khá đơn giản sử dụng Django Taggit để gắn thẻ.Làm cách nào để tạo danh sách và chế độ xem chi tiết cho django-taggit?

Mọi thứ hoạt động tốt, nhưng bây giờ tôi muốn mở rộng một số chức năng và tôi hơi bối rối.

Điều tôi muốn là hai chế độ xem.

Chế độ hiển thị tất cả các thẻ của tôi trong hệ thống. Chế độ hiển thị tất cả nội dung từ ứng dụng của tôi với một thẻ cụ thể.

Điều gì có ý nghĩa với tôi là làm như sau cho mỗi chế độ xem.

trong views.py cho myapp

  1. tất cả các Tag

    từ myapp.models nhập App

    từ taggit.models nhập Tag

    lớp TagList (ListView):

    "" "Nhận tất cả các thẻ trong db" ""

    queryset = Tag.objects.all() 
    template_name = "myapp/TagList.html" 
    paginate_by = 10 
    
  2. Tất cả các nội dung cho một Tag

    từ myapp.models nhập App

    từ taggit.models nhập Tag

    lớp TaggedList (ListView): """ Nhận được tất cả các contet cho thẻ "" "

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

Tôi đã mất trí hay thực sự dễ dàng? BTW, tôi đang sử dụng chế độ xem lớp chung.

Cảm ơn sự giúp đỡ. Dave

+0

ok, vì vậy công cụ đầu tiên hoạt động rất tốt và đó là cách tôi có thể làm điều đó. –

+0

Cách thứ hai không hoạt động. Tôi nhận được một số nguyên lỗi cho tôi biết rằng tôi đang yêu cầu điều sai. –

+0

trả về get_list_or_404 (Ứng dụng, thẻ = self.kwargs ['tag']) - đó là truy vấn tôi đang sử dụng –

Trả lời

3

2. Tôi tin rằng đây là để trả về một đối tượng duy nhất, không phải nhiều đối tượng.

def get_object(self): 

Thay vào đó có lẽ bạn nên thử một cái gì đó như sau:

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

này trả về một danh sách các mục có GenericForeignKeys

Nếu bạn chỉ quan tâm đến một mô hình cụ thể được gọi là App sau đó

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

Tên biến mặc định trong mẫu là TaggedItem_list sau đó

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

Các url.py sẽ phải tương tự như

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