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

如何在Django Admin中实现字段字符截断?示例:仅显示description前20字符

嗨,这个需求我之前在项目里也碰到过,在Django Admin里给长字段做截断显示其实有好几种实用的方法,我给你详细说说:

方法一:自定义截断函数(最直观)

直接在你的ModelAdmin类里写一个自定义方法,手动处理字段的截断逻辑,然后把这个方法名放到list_display里就行。还能顺便设置表头的显示名称,代码示例如下:

from django.contrib import admin
from .models import YourModel  # 替换成你的模型类

class YourModelAdmin(admin.ModelAdmin):
    # 把自定义方法加入列表显示
    list_display = ('truncated_description',)

    def truncated_description(self, obj):
        # 判断字段长度,超过20字符就截断加省略号
        if len(obj.description) > 20:
            return f"{obj.description[:20]}..."
        return obj.description
    # 设置表头显示的名称,不然会显示方法名
    truncated_description.short_description = 'Description'

admin.site.register(YourModel, YourModelAdmin)
方法二:用Django内置的截断过滤器

Django自带了truncatechars模板过滤器,我们可以在Admin里直接调用它,搭配format_html还能安全渲染内容(比如处理带HTML的字段):

from django.contrib import admin
from django.utils.html import format_html
from django.template.defaultfilters import truncatechars
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('truncated_description',)

    def truncated_description(self, obj):
        # 直接用内置过滤器截断到20字符
        return format_html(truncatechars(obj.description, 20))
    truncated_description.short_description = 'Description'

admin.site.register(YourModel, YourModelAdmin)
方法三:Django 3.2+ 更简洁的装饰器写法

如果你的Django版本在3.2及以上,可以用@admin.display装饰器,省去手动设置short_description的步骤,代码更整洁:

from django.contrib import admin
from django.template.defaultfilters import truncatechars
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('truncated_description',)

    @admin.display(description='Description')
    def truncated_description(self, obj):
        return truncatechars(obj.description, 20)

admin.site.register(YourModel, YourModelAdmin)
额外优化:鼠标悬停显示完整内容

如果想让用户能看到完整的字段内容,可以给截断后的文本加个title属性,鼠标悬停就会显示全部内容,体验更好:

def truncated_description(self, obj):
    return format_html('<span title="{}">{}</span>', obj.description, truncatechars(obj.description, 20))

这些方法都能满足你的需求,选哪种看你的习惯和Django版本就行~

内容的提问来源于stack exchange,提问作者user3541631

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:38