Django - 将音频轨道添加到页面

3
我正在本地运行一个网站开发环境,使用Apache2作为Web服务器,用Django构建了该网站。我想在特定页面添加音轨。我曾经有一个显示图片的页面,我采取了相同的方法尝试播放音轨,但没有成功。 URL 看起来是正确的,是否需要对 FileFields 与 ImageFields 做出任何调整。我知道有一些 jQuery 插件可以播放音频,但我对 Django 和 Web 开发很陌生,所以我想先让这个基础版本工作再转向更高级的方法。
相关代码:
models.py
from django.db import models

class Artist(models.Model):
    artistName = models.CharField(max_length = 30)
    artistInfo = models.TextField()

    def __unicode__(self):
        return self.artistName

class Album(models.Model):
    albumName = models.CharField(max_length = 30)
    artist = models.ForeignKey('Artist')
    date = models.DateTimeField('Release Date')
    albumInfo = models.TextField()
    albumArt = models.ImageField(upload_to="images/albumart/")

    def __unicode__(self):
        return self.albumName

  class Song(models.Model):
    songName = models.CharField(max_length = 30)
    artist = models.ForeignKey('Artist')
    album = models.ForeignKey('Album')
    audio_track = models.FileField(upload_to="songs/")

    def __unicode__(self):
        return self.songName

specificsong.html

{% extends "base.html" %}
{% block content %}
    <div id="singlesong">
        <p>Name: {{ song }}</p>
    <p>Artist: <a href="/artists/{{ song.artist }}/">{{ song.artist }}</a></p>
    <p>Album: <a href="/albums/{{ song.album }}/">{{ song.album }}</a></p>
    <p><audio controls="controls">
        <source src="{{ song.audio_track.url }}" type="audio/mpeg" />
    </audio>
</div>
{% endblock %}

views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from Radio.models import Song, Artist, Album

def SpecificSong(request, songname):
    song = Song.objects.get(songName = songname)
    context = {'song':song}
    return render_to_response('specificsong.html',context, context_instance=RequestContext(request))

urls.py

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    (r'^songs/$', 'Radio.views.SongsAll'),
    (r'^songs/(?P<songname>.*)/$', 'Radio.views.SpecificSong'),
    (r'^artists/(?P<artistname>.*)/$', 'Radio.views.SpecificArtist'),
    (r'^albums/(?P<albumname>.*)/$', 'Radio.views.SpecificAlbum'),
    (r'^register/$', 'listener.views.ListenerRegistration'),
    (r'^login/$', 'listener.views.LoginRequest'),
    (r'^logout/$', 'listener.views.LogoutRequest'), 
    (r'^resetpassword/passwordsent/$', 'django.contrib.auth.views.password_reset_done'),
    (r'^resetpassword/$', 'django.contrib.auth.views.password_reset'),
    (r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm'),
    (r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete'),
    (r'^profile/$', 'listener.views.Profile'),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py (简称)

MEDIA_ROOT = '/home/kyle/Downloads/Django-1.5.1/radioSite/media/'
MEDIA_URL = '/media/'

你能具体说明哪些部分出了问题吗?是文件上传吗?还是音频文件的播放?有没有Django、Apache、JavaScript错误?请同时发布您的urls.py - Scott Woodall
当我加载页面时,播放器出现了。但是,如果我点击播放,播放器就会停留在0:00/0:00,就像曲目没有被加载一样。因此,回放不起作用。稍后添加我的urls.py。 - Kizl
抱歉问了这么多问题,只是想尽可能收集更多信息。您能否发布单个<source src="{{ song.audio_track.url }}" type="audio/mpeg" />的输出,以及您的settings.MEDIA_URLsettings.MEDIA_ROOT。我是否正确地假设您想要上传音频文件到settings.MEDIA_ROOT并让Apache提供这些文件?您能确认您上传的文件是否被放置在settings.MEDIA_ROOT目录中? - Scott Woodall
这行代码看起来很可疑:+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)。需要配置Apache来处理任何/ media / * URL路径,而不是Django。 - Scott Woodall
我已经移除了它,网站没有任何变化。音频仍然无法播放。 - Kizl
显示剩余4条评论
1个回答

1

如果未来有人遇到这个问题,以下是一些可能解决问题的步骤列表。

  1. 确保您使用的浏览器支持您正在使用的音频文件类型。(应该很明显,但我犯了这个错误)
  2. 确保上传/下载设置的权限正确。
  3. 确认文件已正确上传到您的媒体文件夹中。
  4. 重新启动服务器。

这些步骤对我有所帮助,希望对其他人也有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接