【问题标题】:Django seems to strip https from static file URLs – why?Django 似乎从静态文件 URL 中去除了 https——为什么?
【发布时间】: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_URLMEDIA_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_URLSTATIC_URL 中的值似乎根本没有被拾取,相对与否。 :-(

标签: django https static-files


【解决方案1】:

答案是根本没有发现任何设置更改 - Gunicorn 进程被挂起,试图以某种方式重新启动(无论我告诉它多少次),保持旧进程继续运行。对模板等进行了更改(因为这些不是 python 文件),但 STATIC_URL 从未更新。

愚蠢的简单答案:重启所有东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2017-04-06
    相关资源
    最近更新 更多