1

django-taggitを使用して、ブログのタグ付けシステムを作成しています。選択されたタグを持つオブジェクトのみが表示されるように、オブジェクトをどのように分離してフィルタリングしますか? djangoをクリックすると、StackOverflowのようになりますタグ

django とタグ付けされたすべての質問が表示されます。このブログ投稿で説明されている方法を試しましたが、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>

この方法を機能させるために何か不足していますか?

これはかなり一般的なプログラミングの必要性のようです。もっと良い方法を知っているかもしれません...あなたのアイデアをありがとう!


編集: @catherine の提案に基づく TagView:

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 が存在せず、使用可能なブログ オブジェクトがありません。むしろ、「もの」だけがテンプレートにレンダリングされます。どんなアイデアでも大歓迎です!ありがとう!

4

2 に答える 2

2
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'])
于 2013-02-27T04:30:35.290 に答える
1

この回答は、「編集:@catherineの提案に基づくTagView:」に基づいています。

メソッドにタイプミスがありますget_queryset

return queryset.filter(tags__name__in=self.kwargs['tags'])

使用するので、使用tagしないtagsでください。

return queryset.filter(tags__name__in=[self.kwargs['tag']])
于 2013-03-04T08:52:42.577 に答える