python - 将 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 视图中是一种好方法吗?一路上会不会有什么惊喜?
解决方案
最后决定使用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 }}
等使用模板中的内容......
推荐阅读
- r - 在R中替换复杂的for循环
- javascript - Async / Await 不适用于 Google drive API
- node.js - 未找到 GitLab CI npm 命令(ubuntu 映像)
- vue.js - 模拟 Vue 方法外部异步调用来测试它
- nvm - “nvm use 11.0.0”命令不起作用,我尝试设置环境变量,但它不起作用
- php - 自动查找列字母
- firebase - 为什么 Firestore 无法在不同字段上执行具有不等式条件的查询?
- python - 为什么 python 元组至少需要一个逗号?
- printf - EFI 格式字符串参考
- python - 使用 Css Selectors 或 xpath 在 scrapy 中提取数据