thl*_*ood 2 python django static nginx uwsgi
这对我的settings.py约static在settings.py:
STATIC_ROOT = '/home/coat/www/site/app/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
"/usr/lib/python2.6/site-packages/django/contrib/admin/static/",
# This is Django admin default static files
)
Run Code Online (Sandbox Code Playgroud)
我用户django服务器:
./manager runserver
然后我打开网址: http://localhost:8000/static/admin/css/base.css
它工作得很好.
但是开放 http://localhost/static/admin/css/base.css
打印'404'

我多次重启Nginx和uwsgi,但它不起作用.
首先,这是nonono:
STATIC_ROOT = '/home/coat/www/site/app/static/'
Run Code Online (Sandbox Code Playgroud)
永远不要硬编码绝对路径,你只是让你的设置文件不那么便携,可能会杀死小猫.根据您的需求进行调整:
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
Run Code Online (Sandbox Code Playgroud)
现在,问你的问题.django.contrib.staticfiles非常棒,但起初可能有点令人困惑.
您必须了解collectstatic命令:
将静态文件收集到STATIC_ROOT中.[...]使用启用的查找程序搜索文件.默认设置是查看STATICFILES_DIRS中定义的所有位置以及INSTALLED_APPS设置指定的应用程序的"静态"目录.
使用runserver,静态文件会自动提供,但在生产模式下(DEBUG = False,像Nginx这样的真实HTTP服务器),你应该运行collectstatic来(重新)构建STATIC_ROOT
STATIC_ROOT:是在HTTP服务器来服务静态文件的根路径的.
STATIC_URL:是根URL在HTTP服务器来服务静态文件来.
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/;
}
Run Code Online (Sandbox Code Playgroud)重新加载nginx
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |