为了区分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但是这是行不通的,没有我的def的def用于相应的摇尾-管理-模板。
短版本:如何将现有字段预先/-附加到Wagtail-admin中的标题中?
发布于 2015-08-05 22:32:05
发布于 2017-04-25 14:49:08
如果您想在所有的模型管理中替换标题(是的,这包括编辑页面),Wagtail有一个内置的机制。
def get_admin_display_title(self):
return '{} - {}'.format(self.date_from, super().get_admin_display_title())发布于 2015-08-02 21:19:27
title是一个实际的Django模型属性,不要试图覆盖它:https://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not-permitted
wagtailadmin/page/list.html中的实际管理模板使用{% for page in pages %}生成循环中的页面列表,并在整个过程中通过包含(templates/wagtailadmin/pages/listing/_page_title_explore.html)调用{{ page.title}}。因此,在检查代码的基础上,Wagtail本身不支持这一点。检查另一个包括templates/wagtailadmin/pages/listing/*。
然而,Django支持用自己的模板覆盖一个应用程序的模板。您可以将此模板复制到项目的模板文件夹中,同时保持相同的路径(例如,假设您的项目是用模板目录设置的)。
您必须用自己的版本替换对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。你可以尝试提交一个问题,并提出一个叉子,提供一个"admin_title“可调用或类似的东西。
https://stackoverflow.com/questions/31771827
复制相似问题