如何在 django admin 中显示标题的多行文本?

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

已经提出的类似问题是针对数据字段的,例如HereHere
但是如何将标题分成多行呢?
考虑一个具有如下模型和管理设置的 Django 应用程序:

模型.py

from django.db import models

class TaskItem(models.Model):
    group = models.ForeignKey(TaskGroup, on_delete=models.CASCADE)
    title = models.CharField(max_length=32, null=False, blank=False)
    description = models.CharField(max_length=45, null=False, blank=False)
    reward = models.IntegerField(default=1000, null=False, blank=False)

admin.py

class TaskItemAdmin(admin.ModelAdmin):
    list_display=['title', 'group', 'reward']
    list_filter=('group',)

如何将标题重命名为带有换行符的

Task Title
Task Group
Task Reward

python django admin
1个回答
0
投票

为了为标题提供自定义名称,您必须使用 显示装饰器

像这样:
(我建议在您使用装饰器自定义的列中添加像

_
这样的前缀,以减少与未修改的列的混淆)

class TaskItemAdmin(admin.ModelAdmin):
    list_display=['_title', '_group', '_reward']
    list_filter=('group',)
    
    @admin.display(description='Task Title')
    def _title(self, obj):
        return obj.title
    
    @admin.display(description='Task Group')
    def _group(self, obj):
        return obj.group
    
    @admin.display(description='Task Reward')
    def _reward(self, obj):
        return obj.reward

这会将标题外观自定义为我们刚刚编写的标题外观,但是如果您尝试在装饰器部分中使用

\n
换行符(例如
@admin.display(description='Task\nReward')
)或 HTML
</br>
标签(例如
@admin.display(description='Task</br>Reward')
),您可能会发现它们都不起作用!
发生这种情况是因为 Django 由于某种原因自动转义 HTML,其中之一就是代码注入。
这就是为什么您可能想要使用 format_html 在代码中部分启用 HTML 格式。

这与 str.format() 类似,只不过它适合构建 HTML 片段。

所以你可以写这样的东西:
admin.py

class TaskItemAdmin(admin.ModelAdmin):
    list_display=['_title', '_group', '_reward']
    list_filter=('group',)
    
    @admin.display(description=format_html('{}</br>{}', 'Task', 'Title'))
    def _title(self, obj):
        return obj.title
    
    @admin.display(description=format_html('{}</br>{}', 'Task', 'Group'))
    def _group(self, obj):
        return obj.group
    
    @admin.display(description=format_html('{}</br>{}', 'Task', 'Reward'))
    def _reward(self, obj):
        return obj.reward

结果将类似于:
Django admin panel showing the result

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