页面类型随机显示 "Home page" 或 "page"

Page Type showing "Home page" or "page" randomly

我按照 Official Wagtail Docs 将新安装的 Wagtail 集成到现有的 Django 项目中。 我在现有 Django 的 models.py.

中添加了自定义 HomePage class
# myDjangoProject/models.py

class HomePage(Page):
    template = "homepage.html"
    content = RichTextField()
    content_panels = Page.content_panels + [
        FieldPanel("content")
    ]

Q1:为什么在上面的截图中,系统默认页面Welcome to WagtailPage类型,而新创建的New Page自动是Home page类型?

Q2:为什么在上面的截图中,系统默认页面Welcome to Wagtail下新创建的子页面居然是Home page,没有任何手动配置?

Q3:为什么在上面的截图中,所有新创建的页面都自动(无需手动配置)继承自我在MyDjangoProject/models.py中自定义的HomePage class?这如何反映在源代码级别?

Page class 是 Wagtail 中所有页面类型的基础 class,但通常不希望让用户创建类型为 Page 而不是更具体的内容,因为无法向其添加新的内容字段。因此,the is_creatable attributePage 上设置为 false,这意味着无法通过管理界面创建该类型的新页面。 (此属性不被子classes 继承,因此您创建的任何新页面类型默认为is_creatable = True。)

最初的“欢迎”页面是作为 wagtail.core 应用程序迁移的一部分创建的。此时,Page 是唯一存在的页面类型(因为您的 HomePage 模型尚未定义),因此 Wagtail 使用的就是这种类型。默认页面不是您可以通过管理员自己创建的页面,这似乎有点奇怪,但没有真正的替代方法(除了根本不提供默认页面,这会使开发人员更难查看他们的安装是否正确)已经工作了)。

(当通过 wagtail start 设置一个全新的 Wagtail 项目时,项目模板包含迁移以将初始 Page 实例替换为提供的 HomePage 模型的实例,因此在这种情况下,它不那么令人困惑。)

在您定义 HomePage 模型后,这成为唯一具有 is_creatable = True 的页面类型,因此管理界面会在添加新页面时自动 select 使用此页面类型。当您在主页旁边添加另一个页面模型时,您会发现它会提示您 select 一种页面类型。