Wagtail에서는 태그 기능을 지원한다. 

훌륭한 인터페이스로 제공된 Tag기능을 사용해보자.

 

 

1. Tag 클래스 모델 만들기

from taggit.models import TaggedItemBase


class BlogPageTag(TaggedItemBase):
    content_object = ParentalKey(
        'BlogDetailPage',
        related_name="tagged_items",
        on_delete=models.CASCADE
    )

먼저 Tag 모델을 만들어주자. 태그 기능을 사용할 class를 ParentalKey로 연결해주면 된다. 

 

 

2. tag 필드 만들기

from modelcluster.contrib.taggit import ClusterTaggableManager


class BlogDetailPage(Page):
    """Parental Blog Detail Page"""
	
    ...
    
    tags = ClusterTaggableManager(through=BlogPageTag, blank=True)

ParentalKey로 연결해준 클래스 모델에 tags라는 이름의 필드를 만든다. 

 

 

3. Content_Panels에 등록

content_panels = Page.content_panels + [
      	...
        FieldPanel("tags"),
]

content_panel에 tag를 등록하고 사용해준다.

 

 

4. tag로 검색

    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)
        all_posts = BlogDetailPage.objects.live().public().order_by('-first_published_at')
        
        if request.GET.get('tag', None):
            tags= request.GET.get('tag')
        all_posts = all_posts.filter(tags__slug__in=[tags])

BlogListingPage에서 태그로 검색하는 기능을 만들고 싶다면 위와 같이 하면 된다. 

 

?tags=태그

 

 

5. Template

    <h1>Tags:</h1>

    {% for tag in page.tags.all %}
        <a href="/blog/?tag={{ tag.slug }}">{{ tag }} -- {{ tag.slug }}</a><br />
    {% endfor %}

page의 tags필드의 all로 모든 태그를 가져올 수 있다. 

 

 

'Back-End > Wagtail, Django' 카테고리의 다른 글

Wagtail Custom Page Properties  (0) 2021.12.02
Wagtail Custom Admin Tabs  (0) 2021.12.01
Wagtail Ajax Template  (0) 2021.12.01
Wagtail Cache  (0) 2021.11.28
Wagtail Recaptcha  (0) 2021.11.28

+ Recent posts