Хостинг Django от «Джино»
Table of contents

Реализация своих шаблонных загрузчиков

Встроенные в Django шаблонные загрузчики (описанные в секции «Загрузка шаблонов») покрывают практически все ваши нужды, но в случае необходимости будет достаточно просто реализовать свой собственный загрузчик. Например, вы можете загружать шаблоны из базы данных или напрямую из репозитория Subversion, или из ZIP архива.

Ожидается, что каждый шаблонный загрузчик, описанный в параметре TEMPLATE_LOADERS конфигурационного файла, будет функцией вида:

load_template_source(template_name, template_dirs=None)

Аргумент template_name является именем шаблона, который требуется загрузить (имя передаётся в loader.get_template() или loader.select_template()), а template_dirs является необязательным списком каталогов, в которых следует производить поиск вместо указанных в TEMPLATE_DIRS.

Если загрузчик может успешно загрузить шаблон, он должен возвратить кортеж (template_source, template_path). Здесь template_source является шаблонной строкой, которая будет скомпилирована шаблонной системой, а template_path — путь до загружаемого шаблона. Этот путь может отображаться пользователю в отладочных целях.

Если загрузчик не может загрузить шаблон, он должен вызывать исключение django.template.TemplateDoesNotExist.

Функция каждого загрузчика должна также иметь атрибут is_usable. Это значение булевого типа, которое информирует шаблонную систему о том, доступен ли этот загрузчик текущему проекту. Например, загрузчик, который может загружать шаблоны из питонских яиц ;) устанавливает значение False для этого атрибута, если модуль pkg_resources не установлен, так как этот модуль необходим для его работы с яйцами.

Пример должен всё прояснить. Ниже представлена функция шаблонного загрузчика, который может загружать шаблоны из ZIP файла. Он использует свой конфигурационный параметр TEMPLATE_ZIP_FILES в качестве пути поиска вместо TEMPLATE_DIRS и ожидает, что каждый путь должен быть ZIP файлом, который содержит шаблоны:

import zipfile
from django.conf import settings
from django.template import TemplateDoesNotExist

def load_template_source(template_name, template_dirs=None):
    """Template loader that loads templates from a ZIP file."""

    template_zipfiles = getattr(settings, "TEMPLATE_ZIP_FILES", [])

    # Try each ZIP file in TEMPLATE_ZIP_FILES.
    for fname in template_zipfiles:
        try:
            z = zipfile.ZipFile(fname)
            source = z.read(template_name)
        except (IOError, KeyError):
            continue
        z.close()
        # We found a template, so return the source.
        template_path = "%s:%s" % (fname, template_name)
        return (source, template_path)

    # If we reach here, the template couldn't be loaded
    raise TemplateDoesNotExist(template_name)

# This loader is always usable (since zipfile is included with Python)
load_template_source.is_usable = True

Для того, чтобы воспользоваться данным загрузчиком, его надо добавить в параметр TEMPLATE_LOADERS. Если мы разместили этот код в пакете mysite.zip_loader, тогда надо добавить mysite.zip_loader.load_template_source в параметр TEMPLATE_LOADERS.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5