wagtail/wagtail: A Django content management system focused on flexibility and user experience は、
この状態だと、
参考
前提
以下の
OS
% sw_vers ProductName: Mac OS X ProductVersion: 10.13.1 BuildVersion: 17B1003
Python の
Version % python3 -V Python 3.6.2
wagtail の
Version % python3 -m pip list --format=columns | grep wagtail wagtail 1.13.1
wagtail の
Porject の 作成
あらかじめ、wagtail の プロジェクトを 作成して おきます。 wagtail start mysite ---------------------------------------------------------- Creating a Wagtail project called mysite Success! mysite has been created ----------------------------------------------------------
django-compressorの
インストール
puput は、django-compressor に 依存しているので、 django-compressor の インストールが 必要です。 インストールしていないと、python3 -m pip install django_compressor --user
template 内で 以下の エラーが 出力されます。 'compress' is not a registered tag library. Must be one of:
インストール、 設定
pip で
インストール python3 -m pip install puput --user
INSTALLED_APPS に
追加 puput の template 内で、 wagtail.contrib.wagtailroutablepage
のタグと、 django-compressor
のタグ使用しています。
追加していなければ、wagtail.contrib.wagtailroutablepage
と、compressor
も追加します。
画面表示時でエラーに なる ことは ありませんでしたが、 sitemap の 生成に、 wagtail.contrib.wagtailsitemaps
を使っているので、 そちらも 追加して おきます。 INSTALLED_APPS = ( .... 'puput', .... 'wagtail.contrib.wagtailsitemaps', #追加 'wagtail.contrib.wagtailroutablepage', #追加 'compressor', #追加 )
Puput を
plugin と して 動かす
settings.py
に以下記述を 追加します。 # Puput As Plugin PUPUT_AS_PLUGIN = True
Url を
追加
Plugin として 動作させる 場合は、 wagtail の URL の 直上に、 puput の URL を 追加します。 urlpatterns = [ ... url(r'', include('puput.urls')), url(r'', include(wagtail_urls)), ... ]
Migrate コマンドの
実行 python3 manage.py migrate
初期データの
投入 python3 manage.py puput_initial_data
管理者権限ユーザーの
作成 python3 manage.py createsuperuser
編集画面を 確認
http://127.0.0.1:8000/admin
に
ページ構成
Root ページ下に、Blog ページが 追加されています。
初期設定では、http://127.0.0.1:8000/home
で、wagtail の デフォルトの home ページ、 http://127.0.0.1:8000/blog
でblog ページに アクセスできます。 Blog ページの
編集 コンテンツ
ブログページの編集画面に 移動します。
コンテンツタブでは、タイトル、 Descripttion、 ヘッダイメージ を 編集、 設定する ことができます。 Blog ページの
編集 プロモート
プロモートタブでは、スラッグ、 ページタイトル、 メニューに 表示するか 否か、 ページの 概要を 編集する ことができます。
ページの種類に かかわらずこの 項目は 編集できるので、 デフォルトで 設定可能な 項目に なります。 Blog ページの
編集 設定
設定タブでは、ページング、 Widgets の 表示設定等を 変更可能です。
Comments は、Disqus が 使用できるようです。 Blog Entry の
追加
Blog ページの子ページと して、 記事を 追加できます。
Excerpt
で本文の 抜粋が 設定できます。
設定がない 場合は、 本文が 抜粋されますが、 設定されていると、 Excerpt
が優先で 使用されます。
タグ、カテゴリー、 関連記事が 設定できます。
カテゴリー は、スニペットメニューから 登録して、 登録した カテゴリを 紐づけて 設定します。
Blog の 本文編集欄を Markdown Field に 変更する
Blog の
やり方と
* EntryPage を
* EntryAbstract を
今回、
- models.py
from __future__ import absolute_import, unicode_literals import datetime from django.utils.translation import ugettext_lazy as _ from wagtail.wagtailadmin.edit_handlers import FieldPanel, InlinePanel, MultiFieldPanel, PageChooserPanel from wagtail.wagtailimages.edit_handlers import ImageChooserPanel from modelcluster.contrib.taggit import ClusterTaggableManager from django.db import models from wagtail.wagtailcore.models import Page from wagtailmarkdown.edit_handlers import MarkdownPanel from wagtailmarkdown.fields import MarkdownField def get_image_model_path(): from django.conf import settings return getattr(settings, 'WAGTAILIMAGES_IMAGE_MODEL', 'wagtailimages.Image') class HomePage(Page): pass class EntryAbstract(models.Model): body = MarkdownField(verbose_name=_('body')) tags = ClusterTaggableManager(through='puput.TagEntryPage', blank=True) date = models.DateTimeField(verbose_name=_("Post date"), default=datetime.datetime.today) header_image = models.ForeignKey(get_image_model_path(), verbose_name=_('Header image'), null=True, blank=True, on_delete=models.SET_NULL, related_name='+', ) categories = models.ManyToManyField('puput.Category', through='puput.CategoryEntryPage', blank=True) excerpt = MarkdownField(verbose_name=_('excerpt'), blank=True, help_text=_("Entry excerpt to be displayed on entries list. " "If this field is not filled, a truncate version of body text will be used.")) num_comments = models.IntegerField(default=0, editable=False) content_panels = [ MultiFieldPanel([ FieldPanel('title', classname="title"), ImageChooserPanel('header_image'), MarkdownPanel('body', classname="full"), MarkdownPanel('excerpt', classname="full"), ], heading=_("Content")), MultiFieldPanel([ FieldPanel('tags'), InlinePanel('entry_categories', label=_("Categories")), InlinePanel('related_entrypage_from', label=_("Related Entries"), panels=[PageChooserPanel('entrypage_to')]), ], heading=_("Metadata")), ] class Meta: abstract = True
Model 作成を
対象箇所を
<section class="article"> {% if entry.excerpt %} {{ entry.excerpt|richtext }} {% else %} {{ entry.body|richtext|truncatewords_html:70 }} {% endif %} <a class="blog_btn continue" href="{% entry_url entry blog_page %}">{% trans 'Continue reading' %} »</a> </section>
オペレーションしてみた 感想
一通りの
Blog と しての 機能は 使用可能
最低限の機能は 保持している ため、 問題なく 使えると 思いました。 Markdown は
使用できない
個人的には、Markdown で 編集したいのですが、 記事の Markdwon 編集は できないようです。 承認フローが
回せるのは、 個人 ユースではない 時に 便利
承認フローが回せるので、 複数人で 編集を 行う 場合、 便利かもしれません。
個人的には、
以上です。
コメント