2013-02-27 3 views
1

Im django-taggit을 사용하여 블로그에 태그 시스템을 생성합니다. 선택한 태그가있는 태그 만 표시되도록 객체를 어떻게 구분하고 필터링합니까? 당신이 장고를 클릭하면 StackOverflow와 같은 종류의 Tags태그 색인 만들기 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 :

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 

태그 list.html :

{% block content %} 
    stuff 
{% for blog in blog_list %} 
    {{ blog.article }} 
    {{ blog.name }} 
{% endfor %} 
{% endblock %} 

blog_list 템플릿에 존재하지 않으며, 블로그 객체가 없습니다 유효한. 오히려 'stuff'만 템플릿에 렌더링됩니다. 모든 아이디어를 높이 평가합니다! 감사!

+0

가이드 : http://jquery.webspirited.com/2011/02/jquery-tagit-a-jquery-tagging-plugin/ – catherine

+0

죄송합니다.하지만 필요한 것은 아닙니다. 태그의 보관 색인을 만들려면 내 URL과보기를 구성하는 방법을 알아 내려고합니다. 따라서 사용자가 태그를 클릭하면, 예를 들어'test'를 위해, 그것은 모두 동일한 태그를 가진 객체의 콜렉션 인'example.com/tagged/test /'에 링크됩니다. StackOverflow에서'django '라는 태그를 클릭하면 django :'stackoverflow.com/questions/tagged/django /'태그가 붙은 질문 모음으로 연결됩니다. 그러나 귀하의 의견을 보내 주셔서 감사합니다. –

+0

아, 검색 중 ... – catherine

답변

1

이 답변은 "편집 : @ catherine의 제안에 기반한 TagView :"를 기반으로합니다. 그것이 있어야

return queryset.filter(tags__name__in=self.kwargs['tags']) 
당신이 tag 사용

때문에하지 tags :

당신은 get_queryset 방법, 오타가

return queryset.filter(tags__name__in=[self.kwargs['tag']]) 
+0

나는 이미 그것도 시도했지만 여전히 작동하지 않습니다. 템플릿에'stuff '만 나타나고'blog' 객체는 사용할 수 없습니다. 의견을 보내 주셔서 감사 드리며, 제가 놓친 추가 아이디어가 있으면 크게 감사하겠습니다. 감사! –

+0

실제로''return queryset.filter (tags__name__in = [self.kwargs [ 'tag']])''여야합니다. 대답을 업데이트하고 있습니다. – bmihelac

+0

@NickB 인수를 인수로 사용하려고 시도 했습니까? 이것은 효과가있다. – bmihelac

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']) 
+0

@catherine을 고맙게 여긴다. 그러나 위의'TagView'에서'def get_queryset'을 사용할 때 여전히'튜플 인덱스가 범위를 벗어났습니다. '오류가 발생합니다. –

+0

아이디어가있는 경우 위의 추적 기능이 추가되었습니다. 감사! –

+0

아이디어에 감사하고 @ 캐서린 (+1)을 지원합니다! 그러나 여전히 주어진 태그와 관련된 블로그 개체에 액세스 할 수 없습니다. 위에서 사용하고있는 전체 코드를 추가했습니다. 어떤 아이디어를 높이 평가! –