如何在Django Admin中通过缩进多行显示字段值?
Django Admin中实现姓名字段多行缩进显示
问题场景
我定义了如下的Person模型:
# "models.py" from django.db import models class Person(models.Model): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20)
为了让Django Admin列表里的姓和名分两行显示,我在admin.py里写了这段代码:
# "admin.py" from django.contrib import admin from .models import Person @admin.register(Person) class PersonAdmin(admin.ModelAdmin): list_display = ('person',) def person(self, obj): return obj.first_name + "\n" + obj.last_name
但实际显示时姓名还是挤在同一行,比如:
John Smith # 同一行显示
我想要的效果是姓和名分两行,第二行可以有缩进:
John # 第一行 Smith # 第二行(带缩进)
解决方法
Django Admin的列表视图会自动转义文本中的特殊字符,普通的换行符\n不会被渲染成换行。要实现多行显示,得用HTML的换行标签<br>,同时要用mark_safe标记内容为安全HTML,避免标签被转义。
基础多行显示
修改admin.py中的person方法:
# "admin.py" from django.contrib import admin from django.utils.safestring import mark_safe from .models import Person @admin.register(Person) class PersonAdmin(admin.ModelAdmin): list_display = ('person',) def person(self, obj): return mark_safe(f"{obj.first_name}<br>{obj.last_name}")
带缩进的多行显示
如果需要给第二行加缩进,有两种简单方式:
- 使用空格实体
:
def person(self, obj): return mark_safe(f"{obj.first_name}<br> {obj.last_name}")
- 使用内联CSS样式:
def person(self, obj): return mark_safe(f"{obj.first_name}<br><span style='padding-left: 1em;'>{obj.last_name}</span>")
这样修改后,就能在Django Admin列表里看到姓和名分两行、第二行带缩进的效果了。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

