仅针对某些情况,我正在测试在webfaction上运行nginx + gunicorn后面的Django(1.4)应用程序,以便安全地运行管理部分。这工作正常。 nginx代理正在将请求从http://domain.com/admin
重定向到https://domain.com/admin
,而Django正在为所有内容提供服务而不会出现问题。更大的问题是静态文件。我从一个单独的静态目录中提供这些目录,这些目录可以通过http和https访问。我的问题是如何在应用程序的模板和管理界面模板中呈现静态URL,以便应用适当的前缀(http或https),具体取决于请求是否受到保护。
对于我的应用模板,我使用了{{ STATIC_URL }}path/to/resource
约定,这允许我在template_context_processor函数中轻松调整STATIC_URL上下文变量。但这对使用{% static path/to/resource %}
模板标签呈现网址的管理模板没有任何影响。
我提出的最好的方法是在 settings.py 中制作两个网址:
STATIC_URL = 'https://mydomain.com/static/'
NON_SECURED_STATIC_URL = 'http://mydomain.com/static/'
然后将以下函数添加到 TEMPLATE_CONTEXT_PROCESSORS :
def set_static_url(request):
if not request.is_secure():
return { 'STATIC_URL': settings.NON_SECURED_STATIC_URL }
这实际上是有效的,但似乎相当骇人听闻。我也是Django的新手,我觉得必须有更好或更合适的方式来做到这一点。