Ticket #500: optional_template_file_extensions.3.diff

File optional_template_file_extensions.3.diff, 5.3 KB (added by Chris Beaven, 18 years ago)

Bug fixes to the previous patch.

  • django/conf/global_settings.py

     
    9191# List of locations of the template source files, in search order.
    9292TEMPLATE_DIRS = ()
    9393
    94 # Extension on all templates.
     94# Default extension for templates if none is given.
    9595TEMPLATE_FILE_EXTENSION = '.html'
    9696
     97# File extension for admin templates.
     98ADMIN_TEMPLATE_FILE_EXTENSION = '.html'
     99
    97100# List of callables that know how to import templates from various sources.
    98101# See the comments in django/core/template/loader.py for interface
    99102# documentation.
  • django/core/template/loaders/app_directories.py

     
    11# Wrapper for loading templates from "template" directories in installed app packages.
    22
    3 from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION
     3from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION, ADMIN_TEMPLATE_FILE_EXTENSION
    44from django.core.exceptions import ImproperlyConfigured
    55from django.core.template import TemplateDoesNotExist
    66import os
     
    2828app_template_dirs = tuple(app_template_dirs)
    2929
    3030def get_template_sources(template_name, template_dirs=None):
     31    admin_template_name = None
     32    # Only append file extension if there isn't an extension already.
     33    if not os.path.splitext(template_name)[-1]:
     34        if TEMPLATE_FILE_EXTENSION != ADMIN_TEMPLATE_FILE_EXTENSION:
     35            admin_template_name = template_name + TEMPLATE_FILE_EXTENSION
     36        template_name = template_name + TEMPLATE_FILE_EXTENSION
    3137    for template_dir in app_template_dirs:
    32         yield os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
     38        yield os.path.join(template_dir, template_name)
     39        if admin_template_name:
     40            yield os.path.join(template_dir, admin_template_name)
    3341
    3442def load_template_source(template_name, template_dirs=None):
    3543    for filepath in get_template_sources(template_name, template_dirs):
  • django/core/template/loaders/eggs.py

     
    66    resource_string = None
    77
    88from django.core.template import TemplateDoesNotExist
    9 from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION
     9from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION, ADMIN_TEMPLATE_FILE_EXTENSION
     10import os
    1011
    1112def load_template_source(template_name, template_dirs=None):
    1213    """
     
    1516    For every installed app, it tries to get the resource (app, template_name).
    1617    """
    1718    if resource_string is not None:
    18         pkg_name = 'templates/' + template_name + TEMPLATE_FILE_EXTENSION
     19        admin_pkg_name = None
     20        # Only append TEMPLATE_FILE_EXTENSION if there isn't an extension already.
     21        if not os.path.splitext(template_name)[-1]:
     22            if TEMPLATE_FILE_EXTENSION != ADMIN_TEMPLATE_FILE_EXTENSION:
     23                admin_pkg_name = 'templates/' + template_name + TEMPLATE_FILE_EXTENSION
     24            template_name = template_name + TEMPLATE_FILE_EXTENSION
     25        pkg_name = 'templates/' + template_name
    1926        for app in INSTALLED_APPS:
    2027            try:
    2128                return (resource_string(app, pkg_name), 'egg:%s:%s ' % (app, pkg_name))
    2229            except:
    2330                pass
     31            if admin_pkg_name:
     32                try:
     33                    return (resource_string(app, admin_pkg_name), 'egg:%s:%s ' % (app, admin_pkg_name))
     34                except:
     35                    pass
    2436    raise TemplateDoesNotExist, template_name
    2537load_template_source.is_usable = resource_string is not None
  • django/core/template/loaders/filesystem.py

     
    11# Wrapper for loading templates from the filesystem.
    22
    3 from django.conf.settings import TEMPLATE_DIRS, TEMPLATE_FILE_EXTENSION
     3from django.conf.settings import TEMPLATE_DIRS, TEMPLATE_FILE_EXTENSION, ADMIN_TEMPLATE_FILE_EXTENSION
    44from django.core.template import TemplateDoesNotExist
    55import os
    66
    77def get_template_sources(template_name, template_dirs=None):
    88    if not template_dirs:
    99        template_dirs = TEMPLATE_DIRS
     10    admin_template_name = None
     11    # Only append TEMPLATE_FILE_EXTENSION if there isn't an extension already.
     12    if not os.path.splitext(template_name)[-1]:
     13        if TEMPLATE_FILE_EXTENSION != ADMIN_TEMPLATE_FILE_EXTENSION:
     14            admin_template_name = template_name + TEMPLATE_FILE_EXTENSION
     15        template_name = template_name + TEMPLATE_FILE_EXTENSION
    1016    for template_dir in template_dirs:
    11         yield os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
     17        yield os.path.join(template_dir, template_name)
     18        if admin_template_name:
     19            yield os.path.join(template_dir, admin_template_name)
    1220
    1321def load_template_source(template_name, template_dirs=None):
    1422    tried = []
Back to Top