Pregunta

[Tengo esta discusión en http: // groups. google.com/group/django-users/browse_thread/thread/989c569d5118980d]

Es 'django.template.loaders.app_directories.load_template_source' requerido en la configuración de TEMPLATE_LOADERS para etiquetas de plantilla personalizadas para ¿trabajo?

Sabemos que el simple hecho de tener una etiqueta personalizada en el directorio templatetags de su aplicación Django hace que esa etiqueta esté disponible para su uso en la aplicación.

En el caso de la carga de plantillas, sabemos que tener 'django.template.loaders.filesystem.load_template_source' en TEMPLATE_LOADERS junto con entradas apropiadas en TEMPLATE_DIRS permite a Django cargar plantillas desde el directorios especificados. Esto es bastante claro y lógico. Pero en el caso de las etiquetas de plantillas personalizadas, las veo disponibles mágicamente.

¿Tiene alguna idea de cómo se encuentran / cargan / manejan las etiquetas de plantillas personalizadas?

¿Fue útil?

Solución

No, django.template.loaders.app_directories.load_template_source no se requiere en absoluto para que funcionen las etiquetas de plantillas personalizadas.

No es necesario que especifique directorios para indicar a django dónde cargar las bibliotecas (como hacemos en el caso de las plantillas) templatetags , simplemente asz django asume que debe encontrar bibliotecas templatetags en las aplicaciones especificadas en < código> INSTALLED_APPS list.

Simplemente recorre la lista de aplicaciones de INSTALLED_APPS , importa todas las bibliotecas de los directorios templatetags e importa cada una para que estén disponibles. Si no se encuentra un directorio llamado templatetags, simplemente salta. Pero, intenta ver todas las opciones disponibles en INSTALLED_APPS.

Puede consultar el código en django / templatetags / __ init__.py , y sabrá cómo están disponibles (mágicamente) las etiquetas de templatet. Mira el código,

from django.conf import settings

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

Solo agrega esos módulos a __path__ . Y todo lo que aparece en __path__ se tratará como si también existiera como un submódulo del módulo en el que __path__ aparece en.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top