在django 1.9中提供静态与媒体服务

时间:2016-03-30 19:47:09

标签: python django

为了提供静态文件(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>

1 个答案:

答案 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不会在子目录中查找媒体文件。