wagtail

Wagtail+Puputでブログ最新記事(TOP3)のリストを表示

Wagtailで作成したページにPuputのブログ更新履歴を表示したい

Wagtail+Puputでブログを更新しています。TOPページはWagtailのhome_pageで作成し、ブログはPuputを使っています。

Topページにブログの更新情報を一覧で表示しているのですが、現状は手動更新している(そもそも記事が3つしかないので更新すらしていない。。。)

ここを最新の追加記事を自動で取得するように変更したい。

参考サイト本家マニュアル より、やり方を確認すると、

すべてのページには、テンプレートがレンダリングされるたびに呼び出され、テンプレートにバインドする変数の辞書を返すget_contextメソッドがあります。 テンプレートコンテキストにさらに変数を追加するには、このメソッドをオーバーライドできます。

https://docs.wagtail.io/en/v2.6.1/topics/pages.html#customising-template-context

home_page.htmlのget_contextメソッドを利用してもよいのですが、それではプライバシーポリシーなどもブログ一覧を取得することになります。それは性能上よろしくない(不要なIOを発生させている)ため、top_page.htmlを新たに作成し、そちらのget_contextメソッドで取得するようにします。

もちろん、TOPページのコンテキストタイプを変更する必要がありますが。

修正箇所

以下のサイトを参考にさせて頂きました。修正箇所は少なく、models.pyの修正とtop_page.htmlの追加です。

参考サイト

models.py

from puput.models import EntryPage
...
class TopPage(Page):
    body = RichTextField(blank=True)
    news = RichTextField(blank=True)
    note = RichTextField(blank=True)
    blog = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('body', classname="full"),
        FieldPanel('news', classname="full"),
        FieldPanel('note', classname="full"),
        FieldPanel('blog', classname="full"),
    ]

    def get_context(self, request):
        context = super().get_context(request)

        # Add extra variables and return the updated context
        context['blog_entries'] = EntryPage.objects.live().public().order_by('-first_published_at')[:3]
        return context

top_page.html

        <dl class="date-list">
          {% for entry in blog_entries %}
            <dt>{{ entry.first_published_at|date:"Y/m/d f" }}</dt>
            <dd><a href="{% pageurl entry %}">{{ entry.title }}</a></dd>
          {% endfor %}
        </dl>

結果

DB更新

モデルを変更したのでマイグレーションを実行します。

root@823a5b2f6f52:/code/maitokublog# python manage.py makemigrations
Migrations for 'home':
  home/migrations/0005_toppage.py
    - Create model TopPage
root@823a5b2f6f52:/code/maitokublog# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, home, puput, sessions, taggit, wagtailadmin, wagtailcore, wagtaildocs, wagtailembeds, wagtailforms, wagtailimages, wagtailredirects, wagtailsearch, wagtailusers
Running migrations:
  Applying home.0005_toppage... OK
root@823a5b2f6f52:/code/maitokublog#                               

画面にブログの更新履歴が表示されました。

見た目にはわかりづらいですが、更新履歴が表示されました。

wagtailの管理画面上は4つの記事があり、最新の記事から3つが表示されています。

所感

wagtail+puputを少しづつ勉強しています。

タグ: , ,

About: ken


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください