2017-11-17 10 views
0

얻기 :장고/할미새/taggit -이 보았다 모델 특정 태그 목록

Generating a unique list of Django-Taggit Tags in Wagtail;

과 솔루션이 생성 한 등 태그에 저장된 모든 태그 목록, 즉 이미지, 문서,.

나는 비슷한 목표를 달성하려고합니다. 뉴스 색인 페이지에서 뉴스 페이지 태그를 드롭 다운하십시오.

오직 뉴스 페이지 태그 인 태그 목록을 얻을 수없는 것 같습니다. 현재이 태그는 이미지 및 문서 태그를 포함하여 내 사이트의 모든 태그 목록을 제공합니다.

from django.template.response import TemplateResponse 
from modelcluster.fields import ParentalKey, ParentalManyToManyField 
from modelcluster.tags import ClusterTaggableManager 
from taggit.models import TaggedItemBase, Tag 
from core.models import Page 

class NewsPageTag(TaggedItemBase): 
    content_object = ParentalKey('NewsPage', related_name='tagged_items') 


class NewsPage(Page): 
    tags = ClusterTaggableManager(through=NewsPageTag, blank=True) 


class NewsIndexPage(Page): 

    def serve(self, request, *args, **kwargs): 
     context['tags'] = Tag.objects.all().distinct('taggit_taggeditem_items__tag') 
     return TemplateResponse(
      request, 
      self.get_template(request, *args, **kwargs), 
      context 
     ) 

나는 또한 시도 :

{% if tags.all.count %} 
    {% for tag in tags.all %} 
     <a class="dropdown-item" href="?tag={{ tag.id }}">{{ tag }}</a> 
    {% endfor %} 
{% endif %} 

HELP :

from django.contrib.contenttypes.models import ContentType 
# ... 
def serve(self, request, *args, **kwargs): 
    news_content_type = ContentType.objects.get_for_model(NewsPage) 
    context['tags'] = Tag.objects.filter(
     taggit_taggeditem_items__content_type=news_content_type 
    ) 
    return TemplateResponse(
     request, 
     self.get_template(request, *args, **kwargs), 
     context 
    ) 

context['tags']는 빈 세트를

내 템플릿을 할당한다! 이것은 그렇게 복잡하지 않아야한다고 생각합니다. 고맙습니다

답변

1

새로운 참조 번호 Wagtail Bakery Demo application에서 어떻게 달성 할 수 있습니까?

기본적으로 모든 하위 페이지를 가져온 다음 set을 사용하여 태그가 고유 한 개체인지 확인합니다.

먼저 NewsIndexPage에 방법을 추가하면 이러한 태그를 일관된 방식으로 얻을 수 있습니다. 당신이 당신의 NewsPageIndex 모델에 대한 방법을 가지고 있기 때문에

See: models.py

class NewsIndexPage(Page): 

    # Returns the list of Tags for all child posts of this BlogPage. 
    def get_child_tags(self): 
     tags = [] 
     news_pages = NewsPage.objects.live().descendant_of(self); 
     for page in news_pages: 
      # Not tags.append() because we don't want a list of lists 
      tags += page.get_tags 
     tags = sorted(set(tags)) 
     return tags 

, 당신은 serve 메소드를 오버라이드 (override) O를 필요가 없습니다, 당신은이 같은 템플릿에서 직접 태그를 얻을 수 있습니다.

{% if page.get_child_tags %} 
     {% for tag in page.get_child_tags %} 
      <a class="dropdown-item" href="?tag={{ tag.id }}">{{ tag }}</a> 
     {% endfor %} 
    {% endif %} 

은 할미새 베이커리 데모의 blog_index_page.html

주에서 유사한 템플릿 방법을 참조하십시오 : 당신은 여전히 ​​serve 방법이 뭔가를 수행하여 컨텍스트에 추가 할 수 있습니다

context['tags'] = self.get_child_tags() 
+0

감사합니다! 이것은 훌륭하게 작동했으며 Wagtail Bakery Demo는 매우 유용합니다. – JVsquad