Added per-request cache to get_admin_interface_theme template tag #19

pull/21/head
Fabio Caccamo 2017-06-09 11:58:10 +02:00
parent 2d8eeee425
commit e19cd51803
2 changed files with 27 additions and 6 deletions

View File

@ -11,5 +11,17 @@ register = template.Library()
@register.assignment_tag(takes_context = True) @register.assignment_tag(takes_context = True)
def get_admin_interface_theme(context): 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

View File

@ -2,6 +2,7 @@
from django.conf import settings from django.conf import settings
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory
from django.template import Context, Template from django.template import Context, Template
import random import random
@ -13,16 +14,14 @@ from admin_interface.models import Theme
class AdminInterfaceTestCase(TestCase): class AdminInterfaceTestCase(TestCase):
def setUp(self): def setUp(self):
self.request_factory = RequestFactory()
pass pass
def tearDown(self): def tearDown(self):
shutil.rmtree(settings.MEDIA_ROOT, ignore_errors=True) shutil.rmtree(settings.MEDIA_ROOT, ignore_errors=True)
pass pass
def __render_template(self, string, context=None): def __render_template(self, string, context):
context = context or {}
context = Context(context)
return Template(string).render(context) return Template(string).render(context)
def __test_active_theme(self): def __test_active_theme(self):
@ -104,7 +103,17 @@ class AdminInterfaceTestCase(TestCase):
def test_templatetags(self): def test_templatetags(self):
Theme.objects.all().delete() 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') self.assertEqual(rendered, 'Django')
def test_repr(self): def test_repr(self):