【发布时间】:2013-02-27 02:45:26
【问题描述】:
我正在使用django-taggit 为博客创建标记系统。您如何分离和过滤对象,以便只显示带有选定标签的对象?如果你点击 django ,有点像 StackOverflow 上的样子
它会给你所有标记为 django 的问题。我已经尝试过this blog post 中描述的方法,但我得到了IndexError: tuple index out of range。这是我正在使用的代码:
url(r'^tagged/(?P<tag>[\w-]+)/$', TagView.as_view(), name='tag_url'),
class TagView(ListView):
context_object_name = 'blog'
template_name = 'links/index.html'
def get_queryset(self):
return Blog.objects.filter(tags__name__in=[self.args[0]])
def get_context_data(self, **kwargs):
context = super(TagView, self).get_context_data(**kwargs)
context['requested_tag'] = self.args[0]
return context
<a href='{% url tag_url tag=tag %}'>{{ tag.name }}</a>
我是否遗漏了一些东西来使这种方法起作用?
这似乎是一种非常常见的编程需求。也许您知道更好的方法...感谢您的想法!
编辑:TagView 基于@catherine 的建议:
class TagView(ListView):
model = Blog
context_object_name = 'blog_list'
template_name = 'tag-list.html'
def get_queryset(self):
queryset = super(TagView, self).get_queryset()
return queryset.filter(tags__name__in=self.kwargs['tags'])
class Blog(models.Model):
name = models.CharField(max_length=50)
date = models.DateTimeField()
slug = models.SlugField()
article = models.TextField()
tags = TaggableManager()
def __unicode__(self):
return self.name
标签列表.html:
{% block content %}
stuff
{% for blog in blog_list %}
{{ blog.article }}
{{ blog.name }}
{% endfor %}
{% endblock %}
模板中不存在 blog_list,并且没有可用的博客对象。相反,只有“东西”被呈现给模板。任何想法表示赞赏!谢谢!
【问题讨论】:
-
对不起,但这不是我需要的。我试图弄清楚如何配置我的 url 和视图以创建标签的存档索引。因此,如果用户单击标签,例如
test,它将链接到所有具有相同标签的对象集合:example.com/tagged/test/。就像在 StackOverflow 上单击标签django一样,它会将您链接到标签为 django:stackoverflow.com/questions/tagged/django/的问题集合。不过,感谢您的意见。 -
我也是。感谢您的任何意见!
-
您希望它准确还是只包含 django 标签?
-
不只是寻找 django 标签,而是寻找链接以匹配数据库中存在的任何标签。感谢您的任何想法