为了区分Wagtail CMS管理员中的页面(在页面列表视图中,而不是在编辑页面视图中),title
是 - 在我的情况下 - 还不够。我有一个页面类型很长的页面列表(例如class BlogPage
),其中一些页面可能具有相同的title
。所以我想在此标题中添加第二个标识字段(此处为date_from
,DateField
)。
我想到了
class BlogPage(Page):
...
def title(self):
if self.date_from:
return self.date_from + " - " + self.title
else:
return self.title
但是这不起作用,没有page.title
的{{1}}用于相应的Wagtail-admin-template。
简短版本:如何在Wagtail-admin中将现有字段预先/附加到标题?
答案 0 :(得分:1)
如果您想在所有模特管理员中替换标题(是的,这包括编辑页面),Wagtail内置了mechanism。
def get_admin_display_title(self):
return '{} - {}'.format(self.date_from, super().get_admin_display_title())
答案 1 :(得分:0)
title
是一个实际的Django模型属性,请勿尝试覆盖它:https://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not-permitted
来自wagtailadmin / pages / list.html的实际管理模板使用{% for page in pages %}
生成循环中的网页列表,并通过include({{ page.title}}
)广泛调用templates/wagtailadmin/pages/listing/_page_title_explore.html
。因此,基于检查代码,Wagtail本身不支持这一点。检查其他包含templates/wagtailadmin/pages/listing/*
。
然而,Django支持使用您自己的模板覆盖一个应用程序的模板。您可以将此模板复制到项目的模板文件夹中,保持相同的路径(例如templates/wagtailadmin/pages/listing/_page_title_explore.html
,假设您的项目设置了模板目录)。
您必须使用自己的版本替换page.title
的来电。过滤器或标签可能会使这更容易。将以下过滤条件添加到模板标签中(例如myapp/templatetetags/myapp_tags.py
):
register = template.Library()
@register.filter
def uniquify_title(page):
specific_page = page.specific
try:
return specific_page.date_from.strftime("%Y-%m-%d") + " - " + specific_page.title
except AttributeError:
return specific_page.title
然后在第7行和第9行的模板中替换{{ page.title}}
的用法:
{{ page|uniquify_title }}
这样做的缺点是每次更新Wagtail时都必须更新自己的list.html
版本。您可以尝试在Github上提交一个问题,并提出一个提供“admin_title”可调用的fork或类似的东西。
答案 2 :(得分:0)
wagtailmodeladmin似乎正是我搜索过的内容:扩展wagtailadmin以在页面模型的基础上显示一组已定义的字段 - 不仅仅是title
;就像我会在Django管理站点中拥有它一样。
这样我就不会改变默认的wagtailadmin页面列表 - 就像我在我的问题中尝试过的那样,但hook
在另一个页面列表中作为额外的wagtail-sidebar-navigation-entry。 / p>
感谢other answer我偶然发现了这种可能性。