python manage.py startapp blog
之後會在資料夾下看到blog的資料夾
接著到settings/base.py中新增blog app
INSTALLED_APPS = [
    'home',
    'search',
    'wagtail.contrib.forms',
    'wagtail.contrib.redirects',
    'wagtail.embeds',
    'wagtail.sites',
    'wagtail.users',
    'wagtail.snippets',
    'wagtail.documents',
    'wagtail.images',
    'wagtail.search',
    'wagtail.admin',
    'wagtail.core',
    'modelcluster',
    'taggit',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]
就完成blog的載入了
打開blog/models.py
把下面這段程式碼打進去
from wagtail.core.models import Page
from wagtail.core.fields import RichTextField
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.search import index 
class BlogIndexPage(Page):
    intro = RichTextField(blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('intro', classname="full")
    ]
    
class BlogPage(Page):
    date = models.DateField("Post date")
    intro = models.CharField(max_length=250)
    body = RichTextField(blank=True)
    #定義 date日期、 intro引言 、body內文
    search_field = Page.search_fields + [
        index.SearchField('intro'),
        index.SearchField('body'),
    ]
    content_paenls = Page.content_panels + [
        FieldPanel('date'),
        FieldPanel('intro'),
        FieldPanel('body', classname="full"),
    ]
接著同樣的,應該更新了Model
要做makemigrations和migrate
python manage.py makemigrations
python manage.py migrate
這樣就完成了pages的建立了
現在我們有兩個Page
一個是BlogPage,一個是BlogIndexPage
所以我們需要再templates底下新增默認的檔名 blog_index_page.html 和 blog_page.html
# templates/blog/blog_index_page.html 
{% extends "base.html" %}
{% load wagtailcore_tags %}
{% block content %}
    <h1> {{page.title}} </h1> 
    <div class="intro"> {{page.intro|richtext}} </div>
    {% for post in page.get_children %}
       <h3><a href="{% pageurl post %}">{{post.title}}</a></h3>
       {{post.specific.intro}}
       {{post.specific.body|richtext}}
     {% endfor %} 
{% endblock %}
我們先來看看blog_index_page
首先要記得load wagtailcore_tags這樣才可以使用wagtail內建的tag
接著我們顯示了page.title 還有 page.intro
接著用for迴圈把這個page之下的所有頁面拿出來
然後用 href="{% pageurl post %} 給他連到該post的連結
接著下面印出intro和body
{% extends "base.html" %}
{% load wagtailcore_tags wagtailimages_tags %}
{% block body_class %}template-blogpage{% endblock %}
{% block content %}
	
	<div id='page_content' class='container'>
		<div class="row">
			<div class="col-2"></div>
		<div class="col-10">
	    <div class='title'>{{ page.title }}</div>
	    <p class="date">{{ page.date }}</p>
	    <div class="intro">{{ page.intro }}</div>
	    <div class="body"> {{ page.body|richtext }} </div>
	    
	    <p><a href="{{ page.get_parent.url }}">Return to blog</a></p>
	</div>
	</div>
    
{% endblock %}
同樣的印出title和date
值得一提的是他利用了 page.get_parent.url來取得父頁面的url以連回上一個Page
然後就可以runserver
python manage.py runserver
來到後台

點選add child page

填入title和intro
然後記得要到promote填寫slug

接著到剛新增的blog_index_page新增blog_page


接著就能觀看結果了

http://127.0.0.1:8000/blog/blog-page/

完成!!!
這邊想問個問題,
Templetes結構是不是包成這樣
blog\templetes
-blog\templetes\blog
--blog\templetes\blog\blog_index_page.html
--blog\templetes\blog\blog_page.html
承上所疑問,如果是這個結構,是不是要對blog\views.py做調整,
然後, base.py需不需要調整?
謝謝
來來回回挖了幾天code,重新理解template架構
base.py不需要另外做調整,但是要把新create的app名稱加入APPS裡面
這次會有BUG,BlogPage做不出來則是因為文中"search_field"忘了加s,後面引用的search_fields吃完回填search_field變數後,怎麼樣也不會改變原search_fields行為,導致新增Page時只會有預設行為