Django 1.11 compatibility fixes.
[django-ssify.git] / ssify / variables.py
index 668bb51..5e220ad 100644 (file)
@@ -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,7 +132,7 @@ 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, patch_response=None, asvar=None):
         self.tagpath = tagpath
@@ -137,8 +152,12 @@ 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.patch_response:
+            if not hasattr(request, 'ssi_patch_response'):
+                request.ssi_patch_response = []
             request.ssi_patch_response.extend(self.patch_response)
 
         if self.asvar: