From e19cd51803cb7d6bae870e75f02c79acb5e22070 Mon Sep 17 00:00:00 2001 From: Fabio Caccamo Date: Fri, 9 Jun 2017 11:58:10 +0200 Subject: [PATCH] Added per-request cache to get_admin_interface_theme template tag #19 --- .../templatetags/admin_interface_tags.py | 14 +++++++++++++- tests/tests.py | 19 ++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/admin_interface/templatetags/admin_interface_tags.py b/admin_interface/templatetags/admin_interface_tags.py index 808d58c..b6d3eb9 100644 --- a/admin_interface/templatetags/admin_interface_tags.py +++ b/admin_interface/templatetags/admin_interface_tags.py @@ -11,5 +11,17 @@ register = template.Library() @register.assignment_tag(takes_context = True) def get_admin_interface_theme(context): - return Theme.get_active_theme() + theme = None + request = context.get('request', None) + + if request: + theme = getattr(request, 'admin_interface_theme', None) + + if not theme: + theme = Theme.get_active_theme() + + if request: + request.admin_interface_theme = theme + + return theme diff --git a/tests/tests.py b/tests/tests.py index baddbd2..1eac549 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -2,6 +2,7 @@ from django.conf import settings from django.test import TestCase +from django.test.client import RequestFactory from django.template import Context, Template import random @@ -13,16 +14,14 @@ from admin_interface.models import Theme class AdminInterfaceTestCase(TestCase): def setUp(self): + self.request_factory = RequestFactory() pass def tearDown(self): shutil.rmtree(settings.MEDIA_ROOT, ignore_errors=True) pass - def __render_template(self, string, context=None): - - context = context or {} - context = Context(context) + def __render_template(self, string, context): return Template(string).render(context) def __test_active_theme(self): @@ -104,7 +103,17 @@ class AdminInterfaceTestCase(TestCase): def test_templatetags(self): Theme.objects.all().delete() - rendered = self.__render_template('{% load admin_interface_tags %}{% get_admin_interface_theme as theme %}{{ theme.name }}') + context = Context({}) + rendered = self.__render_template('{% load admin_interface_tags %}{% get_admin_interface_theme as theme %}{{ theme.name }}', context) + self.assertEqual(rendered, 'Django') + + def test_templatetags_with_request(self): + + Theme.objects.all().delete() + context = Context({ + 'request': self.request_factory.get('/') + }) + rendered = self.__render_template('{% load admin_interface_tags %}{% get_admin_interface_theme as theme %}{{ theme.name }}', context) self.assertEqual(rendered, 'Django') def test_repr(self):