Question

[J'ai cette discussion à l'adresse http: //. google.com/group/django-users/browse_thread/thread/989c569d5118980d]

Est-ce que 'django.template.loaders.app_directories.load_template_source' requis dans le paramètre TEMPLATE_LOADERS pour les balises de modèle personnalisées à travail?

Nous savons que le simple fait d'avoir une balise personnalisée dans le répertoire templatetags de votre application Django rend cette balise disponible pour une utilisation dans l'application.

Dans le cas du chargement de modèles, nous savons qu'avoir 'django.template.loaders.filesystem.load_template_source' dans le paramètre TEMPLATE_LOADERS avec , dans TEMPLATE_DIRS, permet à Django de charger les modèles à partir du répertoires spécifiés. C'est assez clair et logique. Mais dans le cas de balises de modèles personnalisés, je les vois devenir disponibles comme par magie.

Avez-vous une idée de la façon dont les balises de modèle personnalisées sont trouvées / chargées / traitées?

Était-ce utile?

La solution

Non, django.template.loaders.app_directories.load_template_source n'est pas du tout nécessaire pour que les balises de modèle personnalisé fonctionnent.

Vous n'êtes pas obligé de spécifier des répertoires pour indiquer à Django où il est possible de charger les bibliothèques templatetags (comme dans le cas des modèles), coz django suppose de rechercher les bibliothèques de modèles dans les applications spécifiées dans < code> INSTALLED_APPS liste.

Il se contente de parcourir la liste d'applications de INSTALLED_APPS , en important toutes les bibliothèques à partir des répertoires templatetags , et les importe pour les rendre disponibles. Si un répertoire appelé templatetags n'est pas trouvé, il saute simplement. Cependant, il essaie d’examiner toutes les options disponibles dans INSTALLED_APPS.

Vous pouvez consulter le code dans django / templatetags / __ init __. py , et vous saurez comment les templatetags sont disponibles (par magie). Regardez le code,

from django.conf import settings

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

Il suffit d'ajouter ces listes de modules à __ chemin __ . Et tout ce qui est répertorié dans __ chemin __ sera traité comme s'il existait également en tant que sous-module du module dont la liste __ chemin __ dans laquelle il apparaît.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top