diff -r b758351d191f -r cc9b7e14412b web/lib/django/template/loaders/filesystem.py --- a/web/lib/django/template/loaders/filesystem.py Wed May 19 17:43:59 2010 +0200 +++ b/web/lib/django/template/loaders/filesystem.py Tue May 25 02:43:45 2010 +0200 @@ -4,38 +4,58 @@ from django.conf import settings from django.template import TemplateDoesNotExist +from django.template.loader import BaseLoader from django.utils._os import safe_join -def get_template_sources(template_name, template_dirs=None): - """ - Returns the absolute paths to "template_name", when appended to each - directory in "template_dirs". Any paths that don't lie inside one of the - template dirs are excluded from the result set, for security reasons. - """ - if not template_dirs: - template_dirs = settings.TEMPLATE_DIRS - for template_dir in template_dirs: - try: - yield safe_join(template_dir, template_name) - except UnicodeDecodeError: - # The template dir name was a bytestring that wasn't valid UTF-8. - raise - except ValueError: - # The joined path was located outside of this particular - # template_dir (it might be inside another one, so this isn't - # fatal). - pass +class Loader(BaseLoader): + is_usable = True + + def get_template_sources(self, template_name, template_dirs=None): + """ + Returns the absolute paths to "template_name", when appended to each + directory in "template_dirs". Any paths that don't lie inside one of the + template dirs are excluded from the result set, for security reasons. + """ + if not template_dirs: + template_dirs = settings.TEMPLATE_DIRS + for template_dir in template_dirs: + try: + yield safe_join(template_dir, template_name) + except UnicodeDecodeError: + # The template dir name was a bytestring that wasn't valid UTF-8. + raise + except ValueError: + # The joined path was located outside of this particular + # template_dir (it might be inside another one, so this isn't + # fatal). + pass + + def load_template_source(self, template_name, template_dirs=None): + tried = [] + for filepath in self.get_template_sources(template_name, template_dirs): + try: + file = open(filepath) + try: + return (file.read().decode(settings.FILE_CHARSET), filepath) + finally: + file.close() + except IOError: + tried.append(filepath) + if tried: + error_msg = "Tried %s" % tried + else: + error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory." + raise TemplateDoesNotExist(error_msg) + load_template_source.is_usable = True + +_loader = Loader() def load_template_source(template_name, template_dirs=None): - tried = [] - for filepath in get_template_sources(template_name, template_dirs): - try: - return (open(filepath).read().decode(settings.FILE_CHARSET), filepath) - except IOError: - tried.append(filepath) - if tried: - error_msg = "Tried %s" % tried - else: - error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory." - raise TemplateDoesNotExist, error_msg + # For backwards compatibility + import warnings + warnings.warn( + "'django.template.loaders.filesystem.load_template_source' is deprecated; use 'django.template.loaders.filesystem.Loader' instead.", + PendingDeprecationWarning + ) + return _loader.load_template_source(template_name, template_dirs) load_template_source.is_usable = True