我有一个带有一些 CBV 的小型 django 应用程序(例如 HTMX/ListView) 我想将此应用程序集成到令人兴奋的 Wagtail 网站中: 所以它是 Wagtail 页面、菜单结构的一部分,我可以在那些 Django 应用程序页面上使用 Streamfields。 我怎样才能实现这个目标?
寻找一个例子。很多示例如何将 Wagtail 集成到 Django 应用程序中,但反之则不然。
我已经使用 django 模型(而不是 wagtail 的 Page 类)设置了一个应用程序。最初我使用视图来更新模型,按照您问题中描述的方式,但我发现这并不令人满意,因为它是一个小型应用程序(4 个表),所以我将其集成到 wagtail 中。我不久前做过,但我很确定这就是我需要做的。
在 django 应用程序中,像往常一样定义模型,但添加面板定义以在 wagtail admin 中使用。例如
== 模型.py ==
class Event(models.Model):
name = models.CharField(max_length=64, blank=False, null=True,)
format = models.IntegerField(blank=False, )
start_date = models.DateField(blank=False, null=False,)
.
. etc.
.
panels = [
MultiFieldPanel([
FieldPanel('name'),
FieldPanel('format'),
FieldPanel('start_date'),
.etc.
.
.
]
在应用程序中创建 wagtail_hooks.py,您需要从 wagtail.contrib.modeladmin.options 导入 ModelAdmin、modeladmin_register、ModelAdminGroup,然后为每个模型创建一个像这样的类(我将再次使用模型 Event例如)
== wagtail_hooks.py ==
class EventAdmin(ModelAdmin):
model = Event
menu_label = 'Events'
menu_icon = 'radio-full' # change as required
list_display = ('name',
'start_date',
)
search_fields = ('start_date', 'name')
我将我的应用程序(称为“竞赛”)设置为主菜单项,每个模型都有子菜单项,位于 wagtail_hooks.py 的底部
class CompetitionGroup(ModelAdminGroup):
menu_label = 'Competitions'
menu_icon = 'radio-empty'
menu_order = 200
items = (CompconfigAdmin, EventAdmin, VenueAdmin, EventVenueAdmin, RoundAdmin)
modeladmin_register(CompetitionGroup)
注意:menu_order,从000开始,100是第二项,200是第三项,依此类推。
不要忘记将您的应用程序添加到settings.py
感谢 learnwagtail.com 的教程,该教程解释了如何执行此操作,我很确定 wagtail 文档中也有关于此的信息。 如果我错过了什么,请大声喊出来,我会尽力提供帮助。