X-Git-Url: https://git.mdrn.pl/django-ssify.git/blobdiff_plain/196df9e8170262c31790260d4e280b9981b557d1..49bb850ee3f5c4fbd32643c6019b8e1c8ccf619a:/ssify/templatetags/ssify.py diff --git a/ssify/templatetags/ssify.py b/ssify/templatetags/ssify.py index 06be39e..a98a463 100644 --- a/ssify/templatetags/ssify.py +++ b/ssify/templatetags/ssify.py @@ -4,26 +4,20 @@ # from __future__ import absolute_import, unicode_literals from django.conf import settings -from django.core.urlresolvers import NoReverseMatch, reverse, resolve -from django.middleware.csrf import get_token, _sanitize_token +try: + from django.urls import NoReverseMatch, reverse, resolve +except ImportError: + # Django < 2 + from django.core.urlresolvers import NoReverseMatch, reverse, resolve + +from django.middleware.csrf import get_token, _sanitize_token, rotate_token from django import template +from django.utils.safestring import mark_safe from django.utils.translation import get_language from ssify.decorators import ssi_variable +from ssify.utils import ssi_vary_on_cookie from ssify.variables import SsiVariable -try: - from django.middleware.csrf import rotate_token -except ImportError: - from django.middleware.csrf import _get_new_csrf_key - - # Missing in Django 1.4 - def rotate_token(request): - request.META.update({ - "CSRF_COOKIE_USED": True, - "CSRF_COOKIE": _get_new_csrf_key(), - - }) - register = template.Library() @@ -70,13 +64,22 @@ def ssi_include(context, name_, **kwargs): for var in pass_vars: if not isinstance(var, SsiVariable): var = SsiVariable(*var) + if not hasattr(request, 'ssi_vars_needed'): + request.ssi_vars_needed = {} request.ssi_vars_needed[var.name] = var + # Remember the decorators to use on the including view. + patch_response = getattr(view, 'ssi_patch_response', None) + if patch_response: + if not hasattr(request, 'ssi_patch_response'): + request.ssi_patch_response = [] + request.ssi_patch_response.extend(patch_response) + # Output the SSI include. - return "" % url + return mark_safe("" % url) -@ssi_variable(register, vary=('Cookie',)) +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) def get_csrf_token(request): """ CsrfViewMiddleware.process_view is never called for cached @@ -103,5 +106,5 @@ def get_csrf_token(request): @register.inclusion_tag('ssify/csrf_token.html', takes_context=True) -def csrf_token(context): +def ssi_csrf_token(context): return {'request': context['request']}