How do I create list and detail views for django-taggit?

吃可爱长大的小学妹 提交于 2020-02-17 15:02:43

问题


I have a fairly simple model that uses Django Taggit for tagging.

Everything works great, but now I'd like to expand some functionality and I'm a little confused.

What I want is two views.

One that shows all my tags in the system. One that shows all the content from my app with a specific tag.

What makes sense to me is to do the following for each view.

in views.py for myapp

  1. All Tags

    from myapp.models import App

    from taggit.models import Tag

    class TagList(ListView):

    """ Get all the tags in the db """

    queryset = Tag.objects.all()
    template_name = "myapp/TagList.html"
    paginate_by = 10
    
  2. All content for a Tag

    from myapp.models import App

    from taggit.models import Tag

    class TaggedList(ListView): """ Get all the contet for a tag """

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

Have I lost my mind or is it really that easy? BTW, I'm using generic class views.

Thanks for the help. Dave


回答1:


2. I believe this is for returning a single object, not multiple objects.

def get_object(self):  

Instead perhaps you should try something like the following:

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

This returns a list of items with GenericForeignKeys

If you are only interested in a specific model called App then

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

Default variable name in the template is TaggedItem_list then

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

The urls.py would have to be similar to

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


来源:https://stackoverflow.com/questions/8314979/how-do-i-create-list-and-detail-views-for-django-taggit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!