wagtailcore_page表下的path列的值是如何填充的。如何决定哪个页面具有什么价值?

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

我需要在wagtail数据库中插入批量页面,我需要找出wagtailcore_page表下的path列的值是如何决定的?

我尝试查看数据库,但无法将此 path 列的值映射到页面的路径。

django wagtail
2个回答
0
投票

Wagtail 使用 django-treebeard 中的物化路径实现来表示树结构。

path
字符串是四个字符元素的序列 - 例如,“000000020001”可以读作“0000 0002 0001”。对于树中的每个级别,您都可以向该序列添加一个新元素 - 例如:

  • 0000 是根节点
  • 00000000 是根的第一个子节点
  • 00000001 是根的第二个子节点
  • 000000010000 是根的第二个孩子的第一个孩子
  • 000000010001 是根的第二个孩子的第二个孩子

每个页面的路径始终以其父页面的路径开头,因此您可以通过查找以 00000001 开头的路径来快速找到路径为 00000001 的页面的所有子页面和后代页面。

另外,请注意这些字符串不仅仅是数字 - django-treebeard 使用字母数字字母表,因此 0009 后面会跟着 000A、000B、000C...,000Z 后面会跟着 0010。(这确保你可以有很多每个家长超过 9999 个孩子。)


0
投票

在 Wagtail 中,wagtailcore_page 表中的 page 列对应于 Django 模型的 Page 实例,用于存储 Wagtail CMS 中页面的层次结构。

页面列表示站点内页面的路径或层次结构。它不存储为直接路径字符串,而是编码为“具体化路径”。物化路径是表示数据库表中页面之间层次关系的一种方式。它通常使用由分隔符分隔的数字或字符串的组合来表示页面的嵌套。

在 Wagtail 中,当您在 CMS 中创建和组织页面时,系统会自动生成并维护此具体化路径。每个页面都有一个父页面(根页面除外),页面的物化路径包括其父页面的 ID 或 slugs,以斜杠分隔。

例如,如果您有这样的页面层次结构:

  • 首页
    • 关于我们
      • 团队
    • 服务

这些页面的具体化路径可能如下所示:

Home: /
About Us: /about-us/
Team: /about-us/team/
Services: /services/

Wagtail 使用此具体化路径按层次结构顺序高效地查询和检索页面。

要将批量页面插入 Wagtail 数据库,通常不需要手动管理页面列。相反,您可以使用 Wagtail 的 API 或 Django 的 ORM 以编程方式创建和组织页面。 Wagtail 将为您处理物化路径的分配。您可以使用 Wagtail API 在 Python 代码中创建和组织页面,Wagtail 将处理细节,包括设置正确的页面值。

如何在 Wagtail 中以编程方式创建页面的示例:

from wagtail.core.models import Page
from myapp.models import CustomPageModel  # Replace with your actual page model

# Create a parent page
home_page = Page.objects.get(slug='home')

# Create child pages under the parent
about_us_page = CustomPageModel(
    title='About Us',
    parent=home_page,
)
about_us_page.save()

team_page = CustomPageModel(
    title='Team',
    parent=about_us_page,
)
team_page.save()

services_page = CustomPageModel(
    title='Services',
    parent=home_page,
)
services_page.save()

在此示例中,您无需担心手动指定页面列值; Wagtail 将根据您在代码中定义的层次结构来处理它。

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