Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

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

Встроенные в 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.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

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

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID