为了提供静态文件(CSS,JS),我设置了设置:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
这意味着我的所有静态文件都需要位于项目根目录static
文件夹
/app1
/app2
/media
/static #They need to be stored here, all static files
/templates
urls.py
settings.py
manage.py
但是,我将它们存储在我应用的静态文件夹中。
/app1/static/ # Storing the static files here
/app2/static/ #and here
/media/
/static/ # but not here
然而,Django能够为他们服务,这怎么可能?
我对media
文件尝试了同样的事情;设置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
并将媒体(图像等)文件存储在每个应用程序的各个媒体目录中。这一次,Django没有提供文件,只有在我将文件移动到项目根media
目录或将设置更改为MEDIA_ROOT = os.path.join(BASE_DIR, '<app_name>/media')
为什么我允许提供静态文件,即使它们不在项目根static
目录而不是媒体文件中 - 它们只是从根media
目录提供。 / p>
答案 0 :(得分:2)
请仔细阅读文档 - https://docs.djangoproject.com/en/1.9/ref/settings/#staticfiles-finders
它准确地说明django将在每个应用程序+设置中指定的目录中搜索静态文件。
在文档中引用 -
默认设置将查找存储在STATICFILES_DIRS设置(使用django.contrib.staticfiles.finders.FileSystemFinder)和每个应用程序的静态子目录中的文件(使用django.contrib.staticfiles.finders.AppDirectoriesFinder)。如果存在多个具有相同名称的文件,则将使用找到的第一个文件。
虽然媒体文件不适用。 Django不会在子目录中查找媒体文件。