Django指向静态文件的不同位置

时间:2017-05-22 06:38:27

标签: django static

我已经在debian 8 vps上部署了django网站。静态文件保存在静态文件夹中,与app文件夹处于同一级别。服务器可以通过debian VPS与他们联系。但是开发版本位于Windows10计算机上。文件是相同的(克隆的git存储库),但在开发版本中,当我尝试访问我的静态文件时,静态/ css /得到404。 从我的setting.py文件:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT=os.path.join(BASE_DIR, 'static')

更新:

在项目的两个版本中,我已将文件移动到project_name / app_name / static(就像在django documentation中推荐的那样)。结果是现在开发服务器看到文件和部署版本没有(即它显示没有任何CSS样式的原始html) - 所以完全与前面的情况相反。 我没有想法。 (也许它与某些事实有关,在某些时候我确实收集了静电,所以我在两个地方都有静态文件夹???)

1 个答案:

答案 0 :(得分:2)

在Django中,您必须与2个设置共存。

当DEBUG = True 时,如果设置变量STATICFILES_DIRS指向path,则环境会自动提供静态文件。 对我来说:

STATICFILES_DIRS= [os.path.join(PROJECT_ROOT, 'static').replace('\\','/'),]

当DEBUG = False 时,处理静态文件的责任是Nginix / Apache。

在项目中,您应该指向URL:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

如果您在每个应用程序中都有一个静态文件夹,则可以使用:

python manage.py collectstatic

这会抓取所有静态文件并将它们放在同一个静态文件夹(STATIC_ROOT)

然后您的Ngnix / Apache也必须知道存储statifiles的位置

(使用Ngnix的一个例子):

server {
    access_log /pathto/log/acces.log;
    error_log  /pathto/log/error.log;
    server_name ******
    charset     utf-8;

    location /static {
        alias /path/to/your/static; <---- This Line
    }

    location / {
         uwsgi_pass django;
         include uwsgi_params;
         uwsgi_read_timeout 600;
     }
}

总是很高兴看一下documentation