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

如何在Django Admin面板为音频FileField添加内置音频播放器

Django Admin 为FileField音频字段添加内置播放器

实现逻辑和你之前做ImageField图片预览完全一致,只需要替换成HTML原生<audio>标签即可,分两步配置:

1. 修改模型类添加预览属性

如果之前做图片预览已经导入过mark_safe,不需要重复导入,直接在Word模型中添加音频预览的属性方法:

from django.utils.html import mark_safe

class Word(models.Model):
    theme = models.ManyToManyField(Theme, related_name='words')
    name = models.CharField(max_length=200, null=True, blank=True)
    sound = models.FileField(upload_to='sounds/', blank=True)
    # 原有icon字段及icon_preview属性保留不变

    @property
    def sound_preview(self):
        if self.sound:
            # 原生audio标签加controls属性显示播放控件,preload="none"禁止预加载减少带宽占用
            return mark_safe(f'<audio controls preload="none" src="{self.sound.url}" style="max-width: 320px;"></audio>')
        return "无音频文件"

2. 修改Admin配置

在对应的ModelAdmin类中,把sound_preview加入列表展示和只读字段配置,和之前icon预览的配置写法完全一致:

@admin.register(Word)
class WordAdmin(admin.ModelAdmin):
    # 如果不需要在列表页显示播放器,把sound_preview从list_display中移除即可
    list_display = ('id', 'name', 'icon', 'icon_preview', 'sound_preview')
    readonly_fields = ('icon_preview', 'sound_preview')

    # 原有icon_preview方法保留不变
    def icon_preview(self, item):
        return item.icon_preview
    icon_preview.short_description = '图标预览'
    icon_preview.allow_tags = True

    # 新增音频预览的admin方法
    def sound_preview(self, item):
        return item.sound_preview
    sound_preview.short_description = '音频播放'
    sound_preview.allow_tags = True

配置说明

  • 常规MP3格式音频所有现代浏览器都原生支持,不需要额外引入第三方播放器
  • 给audio标签加内联样式是为了限制播放器最大宽度,避免在admin页面布局溢出
  • 设置preload="none"是为了避免打开列表页时自动加载所有音频文件,拖慢页面加载速度,只有用户点击播放时才会加载对应音频资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:36:22