创建标记索引Django
我使用创建一个博客标签系统。如何分离和过滤对象,以便只显示具有选定标记的对象?有点像点击django时StackOverflow的效果 它将为您提供所有标记为django的问题。我尝试了上描述的方法,但得到的索引器:元组索引超出范围。这是我正在使用的代码:创建标记索引Django,django,tags,Django,Tags,我使用创建一个博客标签系统。如何分离和过滤对象,以便只显示具有选定标记的对象?有点像点击django时StackOverflow的效果 它将为您提供所有标记为django的问题。我尝试了上描述的方法,但得到的索引器:元组索引超出范围。这是我正在使用的代码: url(r'^tagged/(?P<tag>[\w-]+)/$', TagView.as_view(), name='tag_url'), class TagView(ListView): context_object_
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>
tag-list.html:
{% block content %}
stuff
{% for blog in blog_list %}
{{ blog.article }}
{{ blog.name }}
{% endfor %}
{% endblock %}
模板中不存在blog_列表,并且没有可用的blog对象。相反,只有“stuff”被呈现到模板中。任何想法都很感激!谢谢 这个答案基于“编辑:基于@catherine建议的TagView:”
class TagView(ListView):
model = Blog
......
def get_queryset(self):
# Fetch the queryset from the parent get_queryset
queryset = super(TagView, self).get_queryset()
return queryset.filter(tags__name__in=self.kwargs['tag'])
您在get\u queryset
方法中有一个输入错误:
return queryset.filter(tags__name__in=self.kwargs['tags'])
您使用的是标记
,而不是标记
,因此它应该是:
return queryset.filter(tags__name__in=[self.kwargs['tag']])
导游:对不起,这不是我需要的。我试图弄清楚如何配置我的url和视图来创建标记的存档索引。因此,如果用户单击某个标记,例如
test
,它将链接到所有对象的集合,这些对象都具有相同的标记:example.com/taged/test/
。与StackOverflow相同,如果您单击标记django
,它会将您链接到标记为django的问题集合:StackOverflow.com/questions/taged/django/
。不过,谢谢你的意见,我也是。谢谢你的意见!您希望它是精确的还是只包含django标记?不只是查找django标记,而是查找链接以匹配数据库中存在的任何标记。感谢您在上面列出的TagView
中使用def get__queryset
时提出的任何想法,但仍会导致错误元组索引超出范围。如果您有任何想法,请在上面添加回溯。谢谢谢谢你的想法和支持@catherine(+1)!但是,我仍然无法访问与给定标记关联的博客对象。我已经添加了我在上面使用的完整代码。任何想法都值得赞赏!我也试过了,但还是不起作用。模板中只显示内容
,没有可用的博客
对象。谢谢你的意见,如果你有任何我遗漏的其他想法,我将不胜感激。谢谢实际上,它应该是返回queryset.filter(tags\uu name\uu in=[self.kwargs['tag']])
,我正在更新答案。@NickB您是否尝试将参数作为列表。这应该行得通。
return queryset.filter(tags__name__in=[self.kwargs['tag']])