Как создать список и подробные представления для Django-Taggit?

StackOverflow https://stackoverflow.com/questions/8314979

Вопрос

У меня есть довольно простая модель, которая использует Джанго Таггит для тега.

Все отлично работает, но теперь я хотел бы расширить некоторые функции, и я немного смущен.

Я хочу два просмотра.

Тот, который показывает все мои теги в системе. Тот, который показывает весь контент из моего приложения с определенным тегом.

Что имеет смысл для меня, так это сделать следующее для каждого представления.

в взгляде.

  1. Все теги

    от MyApp.Models Import App

    от тега импорта Taggit.Models

    класс Taglist (ListView):

    "" Получите все теги в DB "" ""

    queryset = Tag.objects.all()
    template_name = "myapp/TagList.html"
    paginate_by = 10
    
  2. Весь контент для тега

    от MyApp.Models Import App

    от тега импорта Taggit.Models

    Класс TaggedList (ListView): "" "Получить все контент для тега" "" "

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

Я сошел с ума или это действительно так просто? Кстати, я использую общие представления классов.

Спасибо за помощь. Дэйв

Это было полезно?

Решение

2. Я считаю, что это для возврата одного объекта, а не нескольких объектов.

def get_object(self):  

Вместо этого, возможно, вам следует попробовать что -то вроде следующего:

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

Это возвращает список элементов с genericforeignkeys

Если вы заинтересованы только в конкретной модели, называемой APP, то

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

Имя переменной по умолчанию в шаблоне taggeditem_list тогда

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

Urls.py должен быть похож на

url(r'someapp/(?P<tag>\w+)/$', TaggedList.as_view())
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top