from django.http import HttpResponsePermanentRedirect from django.template import Library from django.template.base import Node import django.templatetags.future from django.core import urlresolvers class HttpsUrls(object): def process_view(self, request, view_func, view_args, view_kwargs): https_wanted = view_kwargs.pop("https", False) if request.method == "GET" \ and https_wanted \ and not request.is_secure(): return HttpResponsePermanentRedirect \ ("https://%s%s" % (request.get_host(), request.get_full_path())) class HttpsUrlNode(Node): def __init__(self, url_node): self.url_node = url_node def render(self, context): url_string = self.url_node.render(context) match = urlresolvers.resolve(url_string) if match.kwargs.get("https", False): url_string = "https://%s%s" % (context["request"].get_host(), url_string) return url_string def url(parser, token): return HttpsUrlNode(django.templatetags.future.url(parser, token)) django.templatetags.future.register.tag(url)