En general las plantillas se almacenan en archivos en el sistema de archivos, pero puedes usar cargadores de plantillas personalizados (custom) para cargar plantillas desde otros orígenes.
Django tiene dos maneras de cargar plantillas:
django.template.loader.get_template(template)
:get_template
retorna la plantilla compilada (un objetoTemplate
) para la plantilla con el nombre provisto. Si la plantilla no existe, se generará una excepciónTemplateDoesNotExist
.django.template.loader.select_template(template_name_list)
:select_template
es similar aget-template
, excepto que recibe una lista de nombres de plantillas. Retorna la primera plantilla de dicha lista que existe. Si ninguna de las plantillas existe se lanzará una excepciónTemplateDoesNotExist
.
Como se vio en el Capítulo 4, cada una de esas funciones usan por omisión el
valor de tu variable de configuración TEMPLATE_DIRS
para cargar las
plantillas. Sin embargo, internamente las mismas delegan la tarea pesada a un
cargador de plantillas.
Algunos de los cargadores están, por omisión, desactivados pero puedes
activarlos editando la variable de configuración TEMPLATE_LOADERS
.
TEMPLATE_LOADERS
debe ser una tupla de cadenas, donde cada cadena representa
un cargador de plantillas. Estos son los cargadores de plantillas incluidos con
Django:
1. django.template.loaders.filesystem.load_template_source
: Este cargador
carga plantillas desde el sistema de archivos, de acuerdo a
TEMPLATE_DIRS
. Por omisión está activo.
2. django.template.loaders.app_directories.load_template_source
: Este
cargador carga plantillas desde aplicaciones Django en el sistema de
archivos. Para cada aplicación en INSTALLED_APPS
, el cargador busca un
sub-directorio templates
. Si el directorio existe, Django buscará una
plantilla en el mismo.
Esto significa que puedes almacenar plantillas en tus aplicaciones
individuales, facilitando la distribución de aplicaciones Django con
plantillas por omisión. Por ejemplo si INSTALLED_APPS
contiene
('myproject.polls', 'myproject.music')
entonces
get_template('foo.html')
buscará plantillas en el siguiente orden:
/path/to/myproject/polls/templates/foo.html
/path/to/myproject/music/templates/foo.html
Notar que el cargador realiza una optimización cuando es importado por
primera vez: hace caching de una lista de cuales de los paquetes en
INSTALLED_APPS
tienen un sub-directorio templates
.
Por omisión este cargador está activo.
3. django.template.loaders.eggs.load_template_source
: Este cargador es
básicamente idéntico a app_directories
, excepto que carga las
plantillas desde eggs Python en lugar de hacerlo desde el sistema de
archivos. Por omisión este cargador está desactivado; necesitarás
activarlo si estás usando eggs para distribuir tu aplicación.
Django usa los cargadores de plantillas en el orden en el que aparecen en la
variable de configuración TEMPLATE_DIRS
. Usará cada uno de los cargadores
hasta que uno de los mismos tenga éxito en la búsqueda de la plantilla.