在Wagtail CMS admin中将字段内容附加到标题字段

在Wagtail CMS admin中将字段内容附加到标题字段,wagtail,Wagtail,为了区分Wagtail CMS admin中的页面(在页面列表视图中,而不是在编辑页面视图中),在我的例子中,标题是不够的。我有一个很长的一种页面类型的页面列表(比如classblogpage),其中一些页面可能具有相同的标题。因此,我想在此标题中添加第二个标识字段(此处:date\u from,一个DateField) 我想到 class BlogPage(Page): ... def title(self): if self.date_from: re

为了区分Wagtail CMS admin中的页面(在页面列表视图中,而不是在编辑页面视图中),在我的例子中,
标题是不够的。我有一个很长的一种页面类型的页面列表(比如
classblogpage
),其中一些页面可能具有相同的
标题。因此,我想在此标题中添加第二个标识字段(此处:
date\u from
,一个
DateField

我想到

class BlogPage(Page):
    ...
    def title(self):
    if self.date_from:
        return self.date_from + " - " + self.title
    else:
        return self.title
但这不起作用,不带my
def的
page.title
用于相应的


简短版本:如何在Wagtail admin中将现有字段预/追加到标题中?

title
是一个实际的Django模型属性,不要尝试覆盖它:

wagtailadmin/pages/list.html中的实际管理模板使用
{%for pages in pages%}
生成循环中的页面列表,并通过include(
templates/wagtailadmin/pages/listing/_page_title_explore.html
)调用
{{page.title}}
。因此,基于对代码的检查,Wagtail本身不支持这一点。检查其他包括
模板/wagtailadmin/pages/listing/*

但是,Django支持用自己的模板覆盖一个应用程序的模板。您可以将此模板复制到项目的模板文件夹中,保持相同的路径(例如,
templates/wagtailadmin/pages/listing/\u page\u title\u explore.html
假设您的项目设置了模板目录)

您必须用自己的版本替换对
page.title
的调用。过滤器或标记可能会使这更容易。将以下筛选器添加到templatetags(例如,
myapp/templatetags/myapp_tags.py
):

然后将模板中从第7行和第9行开始的
{{page.title}}
的用法替换为:

{{ page|uniquify_title }}

缺点是每次更新Wagtail时,您都必须更新自己的
list.html
。您可以尝试在Github上提交一个问题,并提出一个提供“admin_title”可调用或类似内容的fork。

似乎正是我所搜索的:扩展wagtailadmin以显示一组定义的字段,而不仅仅是页面模型上的
title
;就像我在Django管理员网站上看到的一样

这样,我就不会改变默认的wagtailadmin页面列表——就像我在问题中尝试过的那样,而是将
hook
作为额外的wagtail侧栏导航条目添加到额外的页面列表中


多亏了一个例子,我偶然发现了这种可能性。

如果您想在所有模型管理员中替换标题(是的,这包括编辑页面),Wagtail有一个内置的标题

def get_admin_display_title(self):
    return '{} - {}'.format(self.date_from, super().get_admin_display_title())

为了不触发每个模板,可以将其“缩小”为特定模板:
@register.filter def uniquify_title(page):specific_page=page.specific if specific_page.template==“foo/bar_page.html”:try:return specific_page.datum.strftime(%Y-%m-%d”)+“–”+specific_page.title属性除外错误:return specific_page.title其他:return specific_page.title
我不明白Wagtail为什么不简单地使用u str_uu(self)在管理中显示页面名称。
def get_admin_display_title(self):
    return '{} - {}'.format(self.date_from, super().get_admin_display_title())