【发布时间】:2016-04-24 18:14:41
【问题描述】:
刚刚将我的网站切换为通过 SSL 提供服务,我无法让 Django 获取正确生成的静态文件 URL:s。
我的STATIC_URL 设置格式为https://example.com/assets/static/
当我在模板中执行{% static 'css/file.css' %} 时,路径显示为http://example.com/assets/static/css/file.css — 与以前相同。
我试图解决的问题:
- 确保我正在进行最新的提交,并且设置正确。
- 跑
python manage.py collectstatic - 重启 nginx/gunicorn/memcached
- 已删除
*.pyc-文件,以防万一
MEDIA_URL 也会发生同样的事情。但是,如果我进入交互式 shell 并导入模型,然后打印出上传的图像文件的 .url 属性(例如),它就会出现正确的 https://-prefix。
运行 Django 1.9.5,使用 CachedStaticFileLoader 处理静态文件、Gunicorn (v 19.4) 和模板缓存。缓存引擎是 memcached。
有什么想法吗?
编辑:STATIC_URL 和 MEDIA_URL 的设置更改似乎根本没有被采纳,尽管其他代码更改似乎有效。我不知道发生了什么......
【问题讨论】:
-
你有
os.environ['HTTPS'] = "on"并且你尝试过使用相对STATIC_URL吗?同样,在 guncorn 或 nginx 中从 http 重定向到 https 也是一件好事,这应该服务于静态 -
我使用
SECURE_PROXY_SSL_HEADER设置从 Nginx 将 HTTPS 状态传达给 Django,它似乎正在工作(我可以在模板中输出request.is_secure的结果,它返回 @987654337 @)。我尝试将HTTPS=on添加到环境中,但它对我的问题没有影响。我怀疑发生了其他事情,因为MEDIA_URL和STATIC_URL中的值似乎根本没有被拾取,相对与否。 :-(
标签: django https static-files