Пользовательские теги шаблонов и загрузчики шаблонов Django - PullRequest
4 голосов
/ 30 июля 2009

[У меня есть это обсуждение на http://groups.google.com/group/django-users/browse_thread/thread/989c569d5118980d]

Является 'django.template.loaders.app_directories.load_template_source' требуется в настройке TEMPLATE_LOADERS для пользовательских тегов шаблона Работа?

Мы знаем, что наличие собственного тега в каталоге templatetags вашего приложения Django делает этот тег доступным для использования в приложении.

В случае загрузки шаблонов мы знаем, что наличие django.template.loaders.filesystem.load_template_source в настройке TEMPLATE_LOADERS вместе с соответствующими записями в TEMPLATE_DIRS позволяет Django загружать шаблоны из указанного каталоги. Это довольно понятно и логично. Но в случае пользовательских тегов шаблонов я вижу, что они становятся волшебно доступными.

Итак, вы знаете, как найти / загрузить / обработать пользовательские теги шаблона?

1 Ответ

10 голосов
/ 30 июля 2009

Нет, django.template.loaders.app_directories.load_template_source совсем не требуется для работы пользовательских тегов шаблонов.

Вам не нужно указывать каталоги, чтобы указать django, откуда и откуда загружать библиотеки тегов библиотек (как мы делаем в случае шаблонов), просто coz django предполагает поиск библиотек шаблонов в приложениях, указанных в INSTALLED_APPS список.

Он просто зацикливается на списке приложений INSTALLED_APPS, импортируя все библиотеки из каталогов templatetags внутри, и импортируя каждую из них, чтобы сделать их доступными. Если каталог с именем templatetags не найден, он просто пропускается. Но он пытается просмотреть все доступные опции в INSTALLED_APPS.

Вы можете взглянуть на код в django/templatetags/__init__.py, и вы узнаете, как теги шаблона сделали (волшебным образом) доступными. Посмотрите на код,

from django.conf import settings

for a in settings.INSTALLED_APPS:
    try:
        __path__.extend(__import__(a + '.templatetags', {}, {}, ['']).__path__)
    except ImportError:
        pass

Он просто добавляет список этих модулей в __path__. И все, что перечислено в __path__, будет рассматриваться так, как если бы оно также существовало как субмодуль модуля, в списке которого __path__ оно появляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...