页面类型随机显示“首页”或“页面”

问题描述

我按照 Official Wagtail Docs 将新安装的 Wagtail 集成到现有的 Django 项目中。 我在现有 Django 的 HomePage添加自定义 models.py 类。

# myDjangoproject/models.py

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

enter image description here

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

enter image description here

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

enter image description here

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

解决方法

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

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

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

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