7

我有一个相当简单的模型,它使用 Django Taggit 进行标记。

一切都很好,但现在我想扩展一些功能,我有点困惑。

我想要的是两种观点。

一个显示我在系统中的所有标签。一个显示我的应用程序中带有特定标签的所有内容。

对我来说有意义的是对每个视图执行以下操作。

在 myapp 的 views.py 中

  1. 所有标签

    从 myapp.models 导入应用程序

    从 taggit.models 导入标签

    类标记列表(列表视图):

    """ 获取数据库中的所有标签 """

    queryset = Tag.objects.all()
    template_name = "myapp/TagList.html"
    paginate_by = 10
    
  2. 一个标签的所有内容

    从 myapp.models 导入应用程序

    从 taggit.models 导入标签

    class TaggedList(ListView): """ 获取标签 """ 的所有内容

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

我是疯了还是真的那么容易?顺便说一句,我正在使用通用类视图。

谢谢您的帮助。戴夫

4

1 回答 1

3

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())
于 2011-12-08T05:46:59.447 回答