Django中的静态根和静态URL混淆

Nag*_*gri 6 python django

我试图在django中读取创建mp3文件.但我对我配置的static和static_root感到困惑.发生的事情是,在我打印下面一行的代码中,它显示了
/usr/local/src/mena_recording/play/static/audio/dorris_0_.mp3

码:

print settings.BASE_DIR+'/play/static/audio/'+record.driverName +'_'+str(counter)+'_'+ '.mp3'
Run Code Online (Sandbox Code Playgroud)

但是当我在这篇文章的下一行中使用相同的东西时它会出现这个错误:

IOError at /
[Errno 2] No such file or directory: u'/usr/local/src/mena_recording/play/static_root/play/static/audio/dorris_0_.oga'
Run Code Online (Sandbox Code Playgroud)

码:

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()
Run Code Online (Sandbox Code Playgroud)

我的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.
)
Run Code Online (Sandbox Code Playgroud)

请有人赐教,请问这是如何工作的?

谢谢.

mu *_*u 無 11

来自django docs,

STATIC_ROOT 是collectstatic将收集静态文件以进行部署的目录的绝对路径.

STATIC_URL是引用位于的静态文件时使用的URL STATIC_ROOT.

因此,当您请求某些特定的静态资源时,会在其中搜索STATIC_ROOT + STATIC_URL并提供服务.

现在在你的问题中,你做到了

STATIC_ROOT = os.path.join(BASE_DIR, 'play/static_root')
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

这意味着django会有效地搜索BASE_DIR/play/static_root/static/哪个是不正确的,所以看看其他路径你可以弄清楚你需要做什么

STATIC_ROOT = os.path.join(BASE_DIR, 'play/')
Run Code Online (Sandbox Code Playgroud)