【问题标题】:serving static vs media in django 1.9在 django 1.9 中提供静态与媒体
【发布时间】:2016-07-19 00:24:36
【问题描述】:

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

【问题讨论】:

  • 最好将此问题标记为已回答。谢谢!

标签: python django


【解决方案1】:

请仔细阅读文档 - 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 不在子目录中查找媒体文件。

【讨论】:

  • 如果您没有找到您要找的东西,我应该解释您的反对意见吗?
  • 我会要求你重新阅读这个问题。 为什么允许我提供静态文件,即使它们不在项目根静态目录中但不在媒体文件中 - 它们仅从根媒体目录提供。
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 2012-10-29
  • 2012-07-07
  • 2023-03-25
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2012-06-15
相关资源
最近更新 更多