|
38
|
1 |
# Wrapper for loading templates from eggs via pkg_resources.resource_string. |
|
|
2 |
|
|
|
3 |
try: |
|
|
4 |
from pkg_resources import resource_string |
|
|
5 |
except ImportError: |
|
|
6 |
resource_string = None |
|
|
7 |
|
|
|
8 |
from django.template import TemplateDoesNotExist |
|
|
9 |
from django.template.loader import BaseLoader |
|
|
10 |
from django.conf import settings |
|
|
11 |
|
|
|
12 |
class Loader(BaseLoader): |
|
|
13 |
is_usable = resource_string is not None |
|
|
14 |
|
|
|
15 |
def load_template_source(self, template_name, template_dirs=None): |
|
|
16 |
""" |
|
|
17 |
Loads templates from Python eggs via pkg_resource.resource_string. |
|
|
18 |
|
|
|
19 |
For every installed app, it tries to get the resource (app, template_name). |
|
|
20 |
""" |
|
|
21 |
if resource_string is not None: |
|
|
22 |
pkg_name = 'templates/' + template_name |
|
|
23 |
for app in settings.INSTALLED_APPS: |
|
|
24 |
try: |
|
|
25 |
return (resource_string(app, pkg_name).decode(settings.FILE_CHARSET), 'egg:%s:%s' % (app, pkg_name)) |
|
|
26 |
except: |
|
|
27 |
pass |
|
|
28 |
raise TemplateDoesNotExist(template_name) |
|
|
29 |
|
|
|
30 |
_loader = Loader() |
|
|
31 |
|
|
|
32 |
def load_template_source(template_name, template_dirs=None): |
|
|
33 |
import warnings |
|
|
34 |
warnings.warn( |
|
|
35 |
"'django.template.loaders.eggs.load_template_source' is deprecated; use 'django.template.loaders.eggs.Loader' instead.", |
|
|
36 |
PendingDeprecationWarning |
|
|
37 |
) |
|
|
38 |
return _loader.load_template_source(template_name, template_dirs) |
|
|
39 |
load_template_source.is_usable = resource_string is not None |