Bardzo brzydki hack, oparty o załącznik do ticketu 7611. Czyści wewnętrzny cache Django, ale pozwala testować działanie kodu opierającego się o renderowanie szablonów bez ryzyka, że aplikacja owe szablony nadpisze:
import os
import sys
from django.conf import settings
from django.template import loader
from django.test import TestCase
class TemplateTestCase(TestCase):
def _pre_setup(self):
self._template_setup()
super(TemplateTestCase, self)._pre_setup()
def _post_teardown(self):
self._template_teardown()
super(TemplateTestCase, self)._post_teardown()
def _template_setup(self):
if hasattr(self, 'template_loaders'):
self._old_template_loaders = settings.TEMPLATE_LOADERS
settings.TEMPLATE_LOADERS = self.template_loaders
loader.template_source_loaders = None
if hasattr(self, 'template_dirs'):
self._old_template_dirs = settings.TEMPLATE_DIRS
test_dir = os.path.dirname(sys.modules[self.__module__].__file__)
settings.TEMPLATE_DIRS = [os.path.join(test_dir, dirname)
for dirname in self.template_dirs]
def _template_teardown(self):
if hasattr(self, '_old_template_loaders'):
settings.TEMPLATE_LOADERS = self._old_template_loaders
loader.template_source_loaders = None
if hasattr(self, '_old_template_dirs'):
settings.TEMPLATE_DIRS = self._old_template_dirs
Użycie:
class TestSomething(TemplateTestCase):
template_loaders = ('django.template.loaders.app_directories.load_template_source',)
def test_foo(self):
pass