Django staticfiles应用程序帮助

dot*_*tty 41 python django static http-status-code-404

我对Django的staticfiles应用程序有一些小问题.

我已经添加了

'django.contrib.staticfiles',
Run Code Online (Sandbox Code Playgroud)

到我的INSTALLED_APPS并添加了

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/django/mylook/static/'
Run Code Online (Sandbox Code Playgroud)

到我的settings.py档案.

我的所有静态文件都位于STATIC_ROOTMac上的文件夹中.

现在,在我使用的模板中

{{ STATIC_URL }}
Run Code Online (Sandbox Code Playgroud)

正确呈现的/static/.

然而

{{ STATIC_URL }}css/style.css
Run Code Online (Sandbox Code Playgroud)

导致404错误.我正在使用'runserver'命令作为服务器.

有什么我想念的吗?

jez*_*dez 119

我恳请你阅读这里的howto文档:http://docs.djangoproject.com/en/dev/howto/static-files/

简而言之:只有在调用collectstatic manangement命令时才使用STATIC_ROOT.不需要将目录添加到STATICFILES_DIRS设置来提供静态文件!

在开发期间(使用自动服务视图时),静态文件将自动在各个位置查找静态文件(因为您将其"服务"视图称为静态文件的路径).对于此搜索,它将使用所谓的"finders"(在STATICFILES_FINDERS设置中定义).

  1. 其中一个默认查找程序是AppDirectoriesFinder,它将查看您的每个应用程序的"/ static /"目录INSTALLED_APPS设置.

  2. 另一个默认查找器是FileSystemFinder,它将查看您在STATICFILES_DIRS设置中指定的目录.

顺便说一句,这两种搜索模式都与模板加载的工作方式类似.

运行collectstatic命令时将使用相同的技术,但它现在将从各个位置收集文件(使用与上面相同的查找器),将找到的文件放入STATIC_ROOT,准备部署.

  • 这是正确的答案.静态文件应用程序专门使用STATICFILES_DIRS.STATIC_ROOT不是.STATIC_ROOT用于将所有媒体收集到生产环境的一个位置,如果安装了AppDirectoriesFinder,则从STATICFILES_DIRS和每个应用程序的静态文件夹中收集.这对我来说很难,特别是对于项目特有的静态媒体而不是任何应用程序. (3认同)
  • 得到它了.@JoshSmeaton我甚至注意到当我们使DEBUG = False时,django会从STATIC_ROOT读取它.当DEBUG = True时,它从STATICFILES_DIRS路径读取.你对此发表评论. (2认同)

C. *_*ppa 1

首先,确保您在 urls.py 中启用了静态服务,仅供开发使用。

另外,你可能会有一个额外的斜杠。如果你的 STATIC_URL == '/static/',那么

{{ STATIC_URL }}/css/style.css 应为 {{ STATIC_URL }}css/style.css。