iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

Django CMS框架 - Wagtail筆記系列 第 6

[Day 6] 使用Tag來標記你的Page

  • 分享至 

  • xImage
  •  

更新models

Wagtail是支援Django的tag功能django-taggit的

首先我們先來更新models.py

from taggit.models import TaggedItemBase, Tag as TaggitTag

class BlogPageTag(TaggedItemBase):
    content_object = ParentalKey('PostPage', related_name='post_tags')

@register_snippet
class Tag(TaggitTag):
    class Meta:
        proxy = True

在這裏,我們引入了TaggedItemBase讓我們對tag的目標進行自定義,一般來說,在Django裡面使用taggit,code應該會是content_object = models.ForeignKey('PostPage')。在Wagtail我們使用ParentalKey代替ForeignKey。

為了使我們能夠管理標籤snippet,我們將Tag設置為taggit包中Tag的代理。接著我們要在PostPage中新增tags的欄位。


from modelcluster.fields import ParentalKey, ParentalManyToManyField
from modelcluster.tags import ClusterTaggableManager

class PostPage(Page):
    body = RichTextField(blank=True)
    categories = ParentalManyToManyField('blog.BlogCategory', blank=True)
    tags = ClusterTaggableManager(through='blog.BlogPageTag', blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('body', classname="full"),
        FieldPanel('categories', widget=forms.CheckboxSelectMultiple),
        FieldPanel('tags'),
    ]

ClusterTaggableManager可以控制tags之間的關係,然後我們用FieldPanel('tag')把tags的選項放到content_panels裡面。

同樣的,進行migrations

python manage.py makemigrations
python manage.py migrate

接著我們就可以在後台的blog_page新增tags

https://ithelp.ithome.com.tw/upload/images/20190920/20119874FhIRnpxx1J.png

接著修改blog_page.html

{% if page.tags.all.count %}
    <div class="tags">
        <h3>Tags</h3>
        {% for tag in page.tags.all %}
            <button type="button">{{ tag }}</button>
        {% endfor %}
    </div>
{% endif %}

{% with categories=page.categories.all %}
    {% if categories %}
        <h3>Categories</h3>
        <ul>
            {% for category in categories %}
                <li style="display: inline">
                    {{ category.name }}
                </li>
            {% endfor %}
        </ul>
    {% endif %}
{% endwith %}

這樣,我們就可以看到tags和categories顯示在blog_page的頁面裡了~~


上一篇
[Day 5] 使用Category來對Blog_page進行分類
下一篇
[Day 7] 對Page自定義route
系列文
Django CMS框架 - Wagtail筆記7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言