首先,这是nonono:
STATIC_ROOT = '/home/coat/www/site/app/static/'
永远不要硬编码绝对路径,你只是让你的设置文件不那么便携,可能会杀死小猫。根据您的需要进行调整:
import os.path
import posixpath
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
# fix STATICFILES_DIRS too
现在,回答你的问题。django.contrib.staticfiles 很棒,但起初可能有点混乱。
您必须了解collectstatic 命令:
将静态文件收集到 STATIC_ROOT。[...] 使用启用的查找器搜索文件。默认是查看 STATICFILES_DIRS 中定义的所有位置以及 INSTALLED_APPS 设置指定的应用程序的“静态”目录。
使用 runserver,静态文件会自动提供,但在生产模式下(DEBUG=False,像 Nginx 这样的真实 HTTP 服务器),您应该运行 collectstatic 来(重新)构建 STATIC_ROOT
STATIC_ROOT:是 HTTP 服务器应该从.
STATIC_URL:是 HTTP 服务器应该将静态文件提供给的根 URL 。
STATICFILES_DIRS:其他静态目录,除了每个应用程序的“静态”子目录。因为 django.contrib.admin 是一个带有“静态”文件夹的普通应用程序,所以不需要在设置中指定它。
结论:如果 STATIC_ROOT 解析为/home/coat/www/site/app/static/
,并且 STATIC_URL 是/static/
,那么您应该:
运行 collectstatic 管理命令
配置 Nginx 服务/home/coat/www/site/app/static/
于/static/
,即:
location ^~ /static/ {
alias /home/coat/www/site/app/static/;
}
重新加载 nginx