如何将 Django 应用程序集成到 Wagtail CMS 中

问题描述 投票:0回答:1

我有一个带有一些 CBV 的小型 django 应用程序(例如 HTMX/ListView) 我想将此应用程序集成到令人兴奋的 Wagtail 网站中: 所以它是 Wagtail 页面、菜单结构的一部分,我可以在那些 Django 应用程序页面上使用 Streamfields。 我怎样才能实现这个目标?

寻找一个例子。很多示例如何将 Wagtail 集成到 Django 应用程序中,但反之则不然。

django wagtail
1个回答
0
投票

我已经使用 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 文档中也有关于此的信息。 如果我错过了什么,请大声喊出来,我会尽力提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.