【问题标题】:How to pass Audio file from model to Template in Django?如何将音频文件从模型传递到 Django 中的模板?
【发布时间】:2019-12-12 12:26:20
【问题描述】:

我刚开始使用 Django 并尝试制作一个音频播放器应用程序网站。我(管理员)希望能够上传访问者可以收听的音频文件。

我创建了一个模型,用于成功上传文件、获取输入文件名并将其存储在我的应用目录中的媒体文件夹中:

class Song(models.Model):
    name = models.CharField(max_length=125)
    audio_file = models.FileField(upload_to='audio_player/media/audio_player/')

    def __str__(self):
        return self.name

在我的模板中,我设置了一个 for 循环来为每个不同的音轨创建音频播放器列表。:

<div class="container">
    {% for song in songs %}
        <audio controls id="player">
            <source src="{{ song.audio_file.url }}" type="audio/wav">
        </audio>
    {% endfor %}
</div>

现在这就是我卡住的地方。相应地出现音频播放器,但您无法播放任何音频。我尝试通过 Chromes DevTools 进行检查,并且源或 src 是文件的正确文件路径。

<source src="audio_player/media/audio_player/Song.wav" type="audio/wav">

最后一天我一直在发疯,试图找出导致它不起作用的原因。我花了很多时间试图让它为文件提供正确的路径,但即使它似乎这样做了,文件仍然无法播放。

我怀疑它可能与将文件传递到模板中有关,据我了解,您应该能够将文件作为上下文传递,对吗?

这就是我的视图的设置方式:

def ap(request):
    context = {
        "songs": Song.objects.all(),
    }
    return render(request, "audio_player/home.html",context)

感谢我能得到的任何帮助!对于任何最终的格式错误等,我们深表歉意......

【问题讨论】:

  • 您是否在settings.py 中设置了媒体?
  • 如编辑 MEDIA_ROOT 和 MEDIA_URL?不,因为我使用的是“upload_to='audio_player/media/audio_player/”,所以我认为我不需要指定它们?还是我完全错了?
  • 顺便说一句,我已经尝试了一些在设置中使用 MEDIA 的解决方案,这些解决方案有助于解决其他用户的类似问题,但最终都没有工作。
  • 你完全错了,你只说upload_to = "/audio_player/",然后在settings.py中设置媒体
  • 谢谢!我意识到我完全错了实际上有帮助!根据 Django 文档以正确的方式应用了 MEDIA_URL 和 MEDIA_ROOT,并且在对设置进行了一些摆弄之后,我让它工作了!

标签: python django python-3.x


【解决方案1】:

通过在 settings.py 中设置这些来让它工作

MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

...并将其添加到我的 urls.py

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

...以及将我的 FileField Upload 更改为

upload_to="audio_player/"

(差不多,只是再次查看 Django 官方文档,但意识到我没有正确理解事情,并且几乎直接复制了它所说的内容)

【讨论】:

    【解决方案2】:

    <div class="container">
        {% for song in songs %}
            <audio controls id="player">
                <source src="{% if song.audio_file %}{{ song.audio_file.url }}{% endif %}" type="audio/wav">
            </audio>
        {% endfor %}
    </div> 

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2021-04-21
    • 2021-12-23
    • 2016-11-17
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多