Django:检查模板的连接是否安全?

mpe*_*pen 8 django ssl

我想从我的模板中检查我的网站是否在HTTPS下运行,以便我可以有条件地将S添加到我的外部JavaScript库(即jQuery)的HTTP中.我怎样才能做到这一点?

Gab*_*ant 14

如果您的资源托管在与提供请求相同的计算机上,则可能根本不需要指定网址方案:

<script src="/static/js/myfile.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

这将使用与原始页面请求相同的协议(http或https)和服务器.

编辑2(2016):

如果您正在访问另一台服务器上的资源,那么现在最好的解决方案(如下面的mpen指出的)是使用相对URL方案:

<script src="//media.example.com/static/js/myfile.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

这将使用http或https自动连接到服务器,具体取决于与当前页面的连接.

请注意,如果您需要支持旧浏览器,这可能会导致一些问题.

编辑:或者,如果您出于某种原因确实需要模板中的信息,则可以添加请求上下文处理器,并在视图中使用RequestContext.这会request在模板上下文中放置一个变量,从而可以访问该HttpRequest对象.然后,您可以通过检查请求的值来测试请求是否安全request.is_secure

例如:

<script src="http{% if request.is_secure %}s{% endif %}://media.example.com/static/js/myfile.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)


mpe*_*pen 7

我不确定Google是否在我提出这个问题的时候这样做了,但他们现在建议您通过添加库来实现

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

//将使用当前正在使用的任何方案-不需要额外的代码或条件语句.


JAL*_*JAL 6

在View with is_secure()中检查请求,并将其发送到模板.