首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Wagtail CMS中向自动生成的段塞添加索引号?

问如何在Wagtail CMS中向自动生成的段塞添加索引号?
EN

Stack Overflow用户
提问于 2021-09-01 19:44:05
回答 2查看 165关注 0票数 0

我在一个项目中使用摇尾式CMS。我能够创建条目并没有问题地更新它们。

我已经将弹格字段从促进面板移到我的内容面板中。这就是我的models.py的样子:

代码语言:javascript
复制
# models.py

...
content_panels = Page.content_panels + [
    FieldPanel('slug'),
    ...
]

promote_panels = []

在创建新条目时,我让Wagtail填充弹格字段。例如,

  • 标题:Birthdays
  • 鼻涕虫:birthdays

我能够输入所有字段并成功保存条目。

当我创建一个具有相同标题的新条目时,我会得到一个错误(保存时),即段塞必须是唯一的。

代码语言:javascript
复制
ValidationError: {'slug': ['This slug is already in use']}

这是合理的,鼻涕虫必须是独特的-然而,我想让摇尾照顾我?我想用同样的页面标题“生日”。

是否有可能让Wagtail捕获异常并将-1、-2等附加到段塞中而不抛出错误?

我来自CraftCMS,这就是创作经验是如何运作的.

EN

回答 2

Stack Overflow用户

发布于 2021-09-01 19:44:05

以下是我发现效果很好的东西。请让我知道,因为我肯定有一个更好,更有效的方法。

代码语言:javascript
复制
# forms.py

from django.utils.text import slugify

...

class MyClass((WagtailAdminPageForm):
    cleaned_data = super(WagtailAdminPageForm, self).clean()

    # Ensure a unique slug for each entry
    if not self.instance.slug:
        cleaned_data['slug'] = slugify(f'{cleaned_data.get("title")} {Page.objects.filter(slug__startswith=cleaned_data.get("slug")).count()}')

    return cleaned_data

当保存具有相同标题的条目时,我不再得到验证错误。因此,我的鼻涕虫看起来是这样的:

示例:

  • birthdays
  • birthdays-1
  • birthdays-2
  • birthdays-3 (等等)

我将弹格字段留在管理面板中,这样作者就可以相应地更改它们。

票数 0
EN

Stack Overflow用户

发布于 2021-09-01 20:52:16

Wagtail有一个用于此目的的find_available_slug方法,尽管它是无文档的,并且打算由Wagtail自己使用,因此在将来的版本中可以在没有警告的情况下删除它:

代码语言:javascript
复制
from wagtail.core.utils import find_available_slug

page.slug = find_available_slug('birthdays', parent_page)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69019768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档