如何在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
相关产品推荐
相关产品推荐

