You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin中实现表头文本的多行显示?

如何在Django Admin中实现表头文本的多行显示?

嘿,这个问题我之前也折腾过,其实用Django自带的工具就能轻松搞定!咱们一步步来实现你要的多行表头效果:

步骤1:导入必要的工具

首先在你的admin.py里导入format_html,它能帮我们告诉Django哪些HTML是安全可以渲染的,不会被转义:

from django.contrib import admin
from django.utils.html import format_html
from .models import TaskItem, TaskGroup  # 记得导入你的模型

步骤2:自定义Admin类的列表字段

把原来list_display里的字段替换成自定义的函数,然后给每个函数设置带换行的表头文本:

class TaskItemAdmin(admin.ModelAdmin):
    # 用自定义的函数名替换原字段名
    list_display=['task_title', 'task_group', 'task_reward']
    list_filter=('group',)

    # 自定义title列
    def task_title(self, obj):
        return obj.title  # 返回原字段的值
    # 设置多行表头,用<br>实现换行,format_html确保HTML被渲染
    task_title.short_description = format_html('Task<br>Title')
    # 加上这个可以让表头点击排序(对应原字段)
    task_title.admin_order_field = 'title'

    # 自定义group列
    def task_group(self, obj):
        return obj.group
    task_group.short_description = format_html('Task<br>Group')
    task_group.admin_order_field = 'group'

    # 自定义reward列
    def task_reward(self, obj):
        return obj.reward
    task_reward.short_description = format_html('Task<br>Reward')
    task_reward.admin_order_field = 'reward'

# 别忘了注册你的模型
admin.site.register(TaskItem, TaskItemAdmin)

原理说明

默认情况下Django Admin会把表头文本里的HTML转义成纯文本,而format_html()会标记这段内容是安全的,所以<br>标签会被浏览器解析成换行,这样表头就变成两行显示啦!如果需要保留排序功能,加上admin_order_field指向原模型字段就行,点击表头依然能正常排序。

备注:内容来源于stack exchange,提问作者Mehrdad995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:59:33