根据request.is_secure的值更改STATIC_URL

时间:2012-08-06 07:30:33

标签: python django

仅针对某些情况,我正在测试在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的新手,我觉得必须有更好或更合适的方式来做到这一点。

0 个答案:

没有答案