eggs.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. # Wrapper for loading templates from eggs via pkg_resources.resource_string.
  2. from __future__ import unicode_literals
  3. try:
  4. from pkg_resources import resource_string
  5. except ImportError:
  6. resource_string = None
  7. from django.apps import apps
  8. from django.conf import settings
  9. from django.template.base import TemplateDoesNotExist
  10. from django.template.loader import BaseLoader
  11. from django.utils import six
  12. class Loader(BaseLoader):
  13. is_usable = resource_string is not None
  14. def load_template_source(self, template_name, template_dirs=None):
  15. """
  16. Loads templates from Python eggs via pkg_resource.resource_string.
  17. For every installed app, it tries to get the resource (app, template_name).
  18. """
  19. if resource_string is not None:
  20. pkg_name = 'templates/' + template_name
  21. for app_config in apps.get_app_configs():
  22. try:
  23. resource = resource_string(app_config.name, pkg_name)
  24. except Exception:
  25. continue
  26. if six.PY2:
  27. resource = resource.decode(settings.FILE_CHARSET)
  28. return (resource, 'egg:%s:%s' % (app_config.name, pkg_name))
  29. raise TemplateDoesNotExist(template_name)