添加声音播放器到django管理面板



我有FileField模型,其中包含音频文件:

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)

我需要在管理面板上显示这个模型的音频播放器。

例如,对于ImageField我这样做:

  1. from django.utils.html import mark_safe和添加属性到模型代码
@property
def icon_preview(self):
if self.icon:
return mark_safe(f'<img src="{self.icon.url}" width="100" height="100" />')
return ""
  1. inadmin.pyadd code:
list_display = ('id', 'name', 'icon', 'icon_preview')
readonly_fields = ('icon_preview',)
def icon_preview(self, item):
return item.icon_preview
icon_preview.short_description = 'icon preview'
icon_preview.allow_tags = True

对于声音

我需要做一些类似的事情

也许您可以链接到音频文件,就像您对图像所做的那样,并让浏览器在用户单击链接时播放该文件。

例如,使用format_html:
from django.utils.html import format_html
@admin.display(description='Sound', ordering='sound')
def sound_display(obj):
link = 'not available'
if obj.sound:
link = format_html('<a href="{}">sound</a>', obj.sound.url)
return link
然后在你的list_display: 中这样使用
list_display = (..., sound_display)

您也可以使用HTML<audio>标签,如@AKX所建议的。

似乎起作用了:

  1. 为模型Word添加以下属性:
@property
def sound_display(self):
if self.sound:
return mark_safe(f'<audio controls name="media"><source src="{self.sound.url}" type="audio/mpeg"></audio>')
return ""
  1. admin.py中添加此结构:
list_display = ('id', 'name', 'transcription', 'translation', 'example', 'sound_display')
readonly_fields = ('sound_display',)
list_display_links = ('id', 'name')
def sound_display(self, item):
return item.sound_display
sound_display.short_description = 'sound'
sound_display.allow_tags = True

最新更新