1

就某些情况而言,我正在测试在 webfaction 上的 nginx+gunicorn 后面运行一个 Django (1.4) 应用程序,以便安全地运行管理部分。这工作正常。nginx 代理正在将请求从http://domain.com/adminto重定向,https://domain.com/admin而 Django 正在毫无问题地提供一切服务。更大的问题是静态文件。我从一个单独的静态目录提供这些服务,该目录可通过 http 和 https 访问。我的问题是如何在我的应用程序模板以及管理界面模板中呈现静态 url,以便根据请求是否安全,应用适当的前缀(http 或 https)。

对于我的应用程序模板,我使用了{{ STATIC_URL }}path/to/resource约定,它允许我在 template_context_processor 函数中轻松调整 STATIC_URL 上下文变量。{% static path/to/resource %}但这对使用templatetag 呈现 url 的管理模板没有任何影响。

我想出的最好的方法是在settings.py中创建两个 url 选项:

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 }

这实际上是有效的,但它似乎相当hackish。我对 Django 也很陌生,我觉得必须有更好或更合适的方法来做到这一点。

4

0 回答 0