X-Git-Url: https://git.mdrn.pl/django-ssify.git/blobdiff_plain/196df9e8170262c31790260d4e280b9981b557d1..49bb850ee3f5c4fbd32643c6019b8e1c8ccf619a:/ssify/variables.py diff --git a/ssify/variables.py b/ssify/variables.py index e969450..5e220ad 100644 --- a/ssify/variables.py +++ b/ssify/variables.py @@ -11,7 +11,22 @@ at request time to the prerendered templates. """ from __future__ import unicode_literals from hashlib import md5 -from django import template +from django.template import Node + +try: + # Django < 1.9 + from django.template.base import get_library +except: + from importlib import import_module + from django.template.backends.django import get_installed_libraries + + def get_library(taglib): + if not hasattr(get_library, 'libraries'): + get_library.libraries = get_installed_libraries() + if isinstance(get_library.libraries[taglib], str): + get_library.libraries[taglib] = import_module(get_library.libraries[taglib]).register + return get_library.libraries[taglib] + from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.functional import Promise from django.utils.safestring import mark_safe @@ -72,7 +87,7 @@ class SsiVariable(object): def get_value(self, request): """Computes the real value of the variable, using the request.""" taglib, tagname = self.tagpath.rsplit('.', 1) - return template.get_library(taglib).tags[tagname].get_value( + return get_library(taglib).tags[tagname].get_value( request, *self.args, **self.kwargs) def __str__(self): @@ -117,13 +132,13 @@ def ssi_expect(var, type_): return type_(var) -class SsiVariableNode(template.Node): +class SsiVariableNode(Node): """ Node for the SsiVariable tags. """ - def __init__(self, tagpath, args, kwargs, vary=None, asvar=None): + def __init__(self, tagpath, args, kwargs, patch_response=None, asvar=None): self.tagpath = tagpath self.args = args self.kwargs = kwargs - self.vary = vary + self.patch_response = patch_response self.asvar = asvar def __repr__(self): @@ -137,9 +152,13 @@ class SsiVariableNode(template.Node): var = SsiVariable(self.tagpath, resolved_args, resolved_kwargs) request = context['request'] + if not hasattr(request, 'ssi_vars_needed'): + request.ssi_vars_needed = {} request.ssi_vars_needed[var.name] = var - if self.vary: - request.ssi_vary.update(self.vary) + if self.patch_response: + if not hasattr(request, 'ssi_patch_response'): + request.ssi_patch_response = [] + request.ssi_patch_response.extend(self.patch_response) if self.asvar: context.dicts[0][self.asvar] = var