我按照 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")
]
Q1:在上面的截图中,为什么系统默认页面
Welcome to Wagtail
是Page
TYPE,而新创建的New Page
自动是Home page
TYPE?< /p>
Q2:在上面的截图中,为什么在系统默认页面
Welcome to Wagtail
下新建的子页面竟然是Home page
没有任何手动配置?
Q3:在上面的截图中,为什么所有新创建的页面都会自动(不需要手动配置)继承自我在
HomePage
中自定义的 MyDjangoProject/models.py
类?这如何反映在源代码级别?
答案 0 :(得分:1)
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 旁边添加另一个页面模型时,您会发现它会提示您选择页面类型。