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

如何在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}")

带缩进的多行显示

如果需要给第二行加缩进,有两种简单方式:

  1. 使用空格实体&nbsp;:
def person(self, obj):
    return mark_safe(f"{obj.first_name}<br>&nbsp;&nbsp;{obj.last_name}")
  1. 使用内联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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:01:29