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 |