首页 > 解决方案 > 将 Wagtail 页面集成到现有的 Django 项目中

问题描述

我使用 Django 构建了一个网站,我需要添加功能来编辑网站上每个页面块的每个和平。我找到了 Wagtail 并阅读了有关如何集成它的文档,并考虑了通过 django 视图集成它的方法,如下所示(main是一个应用程序名称):

主/pages.py:

...

class IndexPage(Page):
    header_title = models.CharField(...)
    header_subtitle = models.CharField(...)

...

主/views.py:

...
def view_index(request):
    pages = Page.objects.all()
    page = pages.filter(...) # somehow filter index page
    return render(
                request,
                'index.html',
                context={'page': page.specific},
                content_type='text/html')

...

以这种方式使用 Wagtail 页面并将其集成到现有的 Django 视图中是一种好方法吗?一路上会不会有什么惊喜?

标签: pythondjangowagtail

解决方案


最后决定使用StreamField。StreamField 可用于构建页面,如下所示:

主/pages.py

class IndexPage(Page):
    content = StreamField([
    ('title', blocks.CharBlock()),
    ('subtitle', blocks.CharBlock()),
    ...
    ])

IndexPage 是 Django 术语中的模型(因此我们有一个简单的数据库表),内容存储为 JSON 列表。这两件事让我们的团队了解以我们想要的方式使用它。要在 Django 视图中使用它,可以使用以下代码:

主/views.py:

...
def index_view(request):
    page = IndexPage.objects.all().first()
    return {
        'content': unify(page.content),
    }

unify - 一种从内容创建 dict 的特殊方法,因为内容是一个数组,其中包含标题content[0]、字幕 - 内部content[1]等...索引可以随机重新排列,这就是为什么使用统一很重要的原因。统一应用后,我们可以通过属性{{ content.title }}{{ content.subtitle }}等使用模板中的内容......


推荐阅读