summaryrefslogtreecommitdiff
path: root/django/core/template
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-10-17 02:37:50 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-10-17 02:37:50 +0000
commit57b4f231fdc24dcb41a503c3314442ff5250a830 (patch)
treef2156155788e40698742a9895902a1b6b4c7856c /django/core/template
parentb9736c5c633fe0bd2e1aeda2b9e0a99257175e33 (diff)
Fixed #583 -- Added app_directories template loader, which searches for templates in 'templates' directory in each INSTALLED_APPS package. It's turned off by default.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@892 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/template')
-rw-r--r--django/core/template/loaders/app_directories.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/django/core/template/loaders/app_directories.py b/django/core/template/loaders/app_directories.py
new file mode 100644
index 0000000000..5afb18e2f5
--- /dev/null
+++ b/django/core/template/loaders/app_directories.py
@@ -0,0 +1,28 @@
+# Wrapper for loading templates from "template" directories in installed app packages.
+
+from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION
+from django.core.template import TemplateDoesNotExist
+import os
+
+# At compile time, cache the directories to search.
+app_template_dirs = []
+for app in INSTALLED_APPS:
+ i = app.rfind('.')
+ m, a = app[:i], app[i+1:]
+ mod = getattr(__import__(m, '', '', [a]), a)
+ template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')
+ if os.path.isdir(template_dir):
+ app_template_dirs.append(template_dir)
+
+# It won't change, so convert it to a tuple to save memory.
+app_template_dirs = tuple(app_template_dirs)
+
+def load_template_source(template_name, template_dirs=None):
+ for template_dir in app_template_dirs:
+ filepath = os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
+ try:
+ return open(filepath).read()
+ except IOError:
+ pass
+ raise TemplateDoesNotExist, template_name
+load_template_source.is_usable = True