app1
 - templatetags
   - __init__.py
   - tags.py

app2
 - templatetags
   - __init__.py
   - tags.py

Si vous faites {% load tags %} dans un modèle, l'un de ces éléments est utilisé (celui qui est défini en premier dans les applications installées settings.py). Comment pouvez-vous charger des balises de modèle spécifiques à une application?

Existe-t-il un moyen de modifier le nom des balises d'une application sans affecter le nom de fichier réel? (ce sont des applications django tierces)

Il y a cette question similaire, mais dans ce cas, les noms de modules ne sont pas les mêmes, donc c'est une situation différente.

Il y a aussi cette question qui pose la même chose, mais qui n'a pas de réponse.

J'ai essayé d'utiliser la directive from sans succès {% load tags from app2 %} TemplateSyntaxError: "app2" n'est pas une bibliothèque de balises valide.

0
dimyG 16 janv. 2017 à 20:32

2 réponses

Meilleure réponse

Dans des cas comme celui-ci, où il existe 2 applications avec le même nom de fichier pour leurs balises de modèle, seules les balises de modèle de la première application rencontrée ( telles qu'elles sont définies dans les applications installées dans settings ) est accessible lorsque {% load tags %}.

Donc, j'ai finalement utilisé cette solution de contournement.

my_app
 - templatetags
   - __init__
   - app2_tags_copy.py 

J'ai créé un nouveau fichier de balises (le app2_tags_copy.py ) dans l'une de mes applications et j'ai importé le code de balise de modèle de la deuxième application. Tout ce que ce fichier a, c'est une ligne de code d'importation:

from app2.templatetags.tags import * 

De cette façon, vous pouvez utiliser le code tags.py en utilisant le nom app2_tags_copy.py en faisant simplement {% load app2_tags_copy %} dans les modèles. Même si app2 est mis à jour, le code des balises mis à jour sera utilisé.

0
dimyG 17 janv. 2017 à 13:54

Avez-vous essayé la directive from:

{% load tags from app1 %}
{% load tags from app2 %}
0
metmirr 16 janv. 2017 à 18:54