序幕
Wagtail是建立在Django上的CMS。它继承了Django的一些主要功能,包括安全性和易用性。因此,这两个框架具有许多相似之处。在决定学习Wagtail之前,有帮助有Django的知识。即使可以将Wagtail作为独立框架学习。
尽管它们的所有相似之处在Wagtail和Django之间存在一些差异。 Wagtail最引人注目的是重点放在页面及其所包含的内容上。以及页面之间的分层关系。 (即目录中使用的相同类型的结构)。
└── home
├── blog
│ ├── first_post
│ └── second_post
└── profiles
└── profile1
每种Page类型都是Django模型,并从ClusterableModel继承。然后,clusterablemodel从Django自己的模型类继承。下图显示了它们之间的关系:
关于页面的所有内容
在Wagtail页面中托管所有内容。 Wagtail提供的页面模型抽象了很多东西。这使创建和管理内容变得更加容易。其中一些抽象包括:
- 所有页面都是Django模型的扩展。因此,可以访问模型中提供的所有功能和字段等等。例如,
RichTextField
,StreamField
- 定义页面使您可以定义各种编辑面板。例如:
content_panels
,promote_panels
和settings_panels
,以便于Wagtail的管理面板容易管理 - 页面让您选择用于它们的HTML模板
- 在管理面板中,您可以决定页面路线及其与其他页面的关系。 (即父母,子页)
- Wagtail通过组合功能来改善开发人员的体验。页面类型充当
model
,urls
,views
和admin
类,在典型的django项目中提供。
与django一样,这种易用性是有代价的。由于内部处理了很多事情,它似乎是一个黑匣子,尤其是对于那些不完全掌握内部工作的人。
在您采用Wagtail时要避免的一些错误:
- 使用代码创建页面对象时,您必须考虑页面的关系。使用管理面板时,Wagtail会处理此操作。如前所述,页面之间的关系很重要。下面的堆栈溢出页面中的更多详细信息:。
下面的堆栈溢出页面中的更多详细信息:
我正在尝试编程创建一个
PostPage
对象。该类从Wagtail的koude10模型继承:post = PostPage.objects.create( title='Dummy', intro='This is just for testing dummy', body='Lorem ipsum dolor...', first_published_at=datetime.strptime(f'2019-01-01', '%Y-%m-%d') )
但是,我收到以下错误:
ValidationError: {'path': ['This field cannot be blank.'], 'depth': ['This field cannot
- 确保您注意在管理面板的“促销”选项卡中为您的页面生成的sl(路线),并修改它们以满足您的需求
结论
要了解有关Wagtail可能发生的更多信息,请查看docs。感谢您的阅读。