Django中的静态根和静态网址混淆
我正在尝试在Django中创建mp3文件,但我对我配置的静态文件和静态根目录有些困惑。
发生的情况是,当我在代码中打印下面这行时,它显示的是 /usr/local/src/mena_recording/play/static/audio/dorris_0_.mp3
代码:
print settings.BASE_DIR+'/play/static/audio/'+record.driverName +'_'+str(counter)+'_'+ '.mp3'
但是当我在这段代码的下一行使用相同的内容时,它却给出了这个错误:
IOError at /
[Errno 2] No such file or directory: u'/usr/local/src/mena_recording/play/static_root/play/static/audio/dorris_0_.oga'
代码:
with open(settings.BASE_DIR+'/play/static/audio/'+record.driverName +'_'+str(counter)+'_'+ '.mp3', 'w') as mp3_file:
mp3_file.write(decoded_mp3_str)
mp3_file.close()
我的settings.py文件
STATIC_ROOT = os.path.join(BASE_DIR, 'play/static_root')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'mena_recording/static'),
os.path.join(BASE_DIR, 'play/static'),
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
有人能帮我解释一下这是怎么回事吗?
谢谢。
1 个回答
14
根据Django的文档,
STATIC_ROOT
是一个绝对路径,指的是Django在准备部署时收集静态文件的目录。
STATIC_URL
是用来引用位于STATIC_ROOT
中的静态文件的URL。
所以,当你请求某个特定的静态资源时,Django会在STATIC_ROOT + STATIC_URL
这个组合路径下查找,然后提供这个资源。
在你的问题中,你做了
STATIC_ROOT = os.path.join(BASE_DIR, 'play/static_root')
STATIC_URL = '/static/'
这意味着Django实际上会在BASE_DIR/play/static_root/static/
这个路径下查找,这样是不对的。因此,通过查看其他路径,你可以发现你需要做
STATIC_ROOT = os.path.join(BASE_DIR, 'play/')