我正在尝试成功实现django-audiofield插件,但这是一个主要问题。我可以正常工作,因为在管理界面中可以通过音频字段识别我的新模型,但是当我尝试使用新的音频文件上传它时,它会抛出错误并且出现错误,我无法调试。
这是错误页面日志。
Environment:
Request Method: POST
Request URL: http://45.63.1.97/admin/website/musicpost/add/
Django Version: 1.8.4
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cleanup',
'pagedown',
'website',
'audiofield')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'audiofield.middleware.threadlocals.ThreadLocals')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper
616. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
110. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner
233. return view(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in add_view
1516. return self.changeform_view(request, None, form_url, extra_context)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
34. return bound_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
110. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
30. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in inner
145. return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in changeform_view
1467. self.save_model(request, new_object, form, not add)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in save_model
1078. obj.save()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
734. force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
771. update_fields=update_fields, raw=raw, using=using)
File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py" in send
201. response = receiver(signal=self, sender=sender, **named)
File "/usr/local/lib/python2.7/dist-packages/django_audiofield-0.8.1-py2.7.egg/audiofield/fields.py" in _rename_audio
222. self._convert_audio(dst_fullpath, instance, ext[1:4])
File "/usr/local/lib/python2.7/dist-packages/django_audiofield-0.8.1-py2.7.egg/audiofield/fields.py" in _convert_audio
140. response = subprocess.Popen(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib/python2.7/subprocess.py" in __init__
710. errread, errwrite)
File "/usr/lib/python2.7/subprocess.py" in _execute_child
1327. raise child_exception
Exception Type: OSError at /admin/website/musicpost/add/
Exception Value: [Errno 2] No such file or directory
这是我的模型的代码。
# Music post model
class MusicPost (models.Model):
# Creation time field
created_at = models.DateTimeField(auto_now_add=True)
# Updated time field
updated_at = models.DateTimeField(auto_now=True)
# Body text for the post
body = models.TextField()
# Add the audio field to your model
audio_file = AudioField(upload_to='/root/goodbyejuly/media', blank=True,
ext_whitelist=(".mp3", ".wav", ".ogg"),
help_text=("Allowed type - .mp3, .wav, .ogg"))
# Add this method to your model
def audio_file_player(self):
"""audio player tag for admin"""
if self.audio_file:
file_url = settings.MEDIA_ROOT + str(self.audio_file)
player_string = '<ul class="playlist"><li style="width:250px;">\
<a href="%s">%s</a></li></ul>' % (file_url, os.path.basename(self.audio_file.name))
return player_string
# Audio field settings
audio_file_player.allow_tags = True
audio_file_player.short_description = ('Audio file player')
这就是我在管理界面中注册模型的方式。
admin.site.register(MusicPost, MarkdownModelAdmin)
这是我用于正文文本的markdown模型管理窗口小部件,过去对我来说效果很好。
# Admin interface override for text field markdown preview
class MarkdownModelAdmin (admin.ModelAdmin):
# Override specific model fields
formfield_overrides = {
# Override text fields to show markdown previews
models.TextField: {'widget': AdminPagedownWidget },
}
谁能帮我解决我的问题?如果您需要更多信息,我会提供。
最佳答案
如Alex所述,一种解决方案是安装 soxi 。您可以使用以下命令进行操作(我的发行版是ubuntu 14)。
完整指南的链接是http://linuxg.net/how-to-install-sox-14-4-1-on-ubuntu-14-10-ubuntu-14-04-and-derivative-systems/
关于python - 从管理界面上传新音频文件时,django-audiofield没有此类文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782417/