J'ai un petit projet Django que j'ai reçu d'un ami. Le code fonctionne parfaitement sur son système. Cependant, sur mon système, le message d'erreur suivant s'affiche lors de l'exécution du serveur:
TemplateSyntaxError at/
'current_tags' n'est pas une bibliothèque de balises valide: bibliothèque de modèles de balises current_tags introuvables, essayé Django.templatetags.current_tags
Le problème est avec une ligne dans un fichier html:
{% load current_tags %}
Ce même code fonctionne sur son système sans erreur. Qu'est-ce que cela pourrait être?
Je suggérerais ce qui suit:
(Très probablement) Vous n'avez pas installé l'une des dépendances de votre bibliothèque de balises. Vérifiez les importations dans le module current_tags.py
.
Assurez-vous que l'application qui inclut la bibliothèque de balises est enregistrée dans settings.py
sous INSTALLED_APPS
.
Assurez-vous que vous pouvez importer avec succès la bibliothèque de balises.
python manage.py Shell
>>> from app.templatetags import current_tags
Cela résume ce que le lien suivant recommande, à savoir que l'erreur elle-même a tendance à vous induire en erreur quant à la recherche d'un modèle. Il ignore les erreurs lors de l'importation, ce qui signifie que current_tags.py
peut lui-même comporter une erreur de syntaxe ou une autre raison pour laquelle il génère ImportError.
Si tout le reste échoue, vérifiez ce lien: http://www.b-list.org/weblog/2007/dec/04/magic-tags/
J'ai eu ce problème et résolu en ajoutant un fichier __init__.py
vierge dans mon répertoire appname/templatetags /.
Les possibilités sont nombreuses:
Redémarrez le serveur a résolu le problème pour moi. Ils doivent l'avoir mentionné dans la documentation.
supposons que vous ayez la structure suivante:
-- Nom de l'application
------- templatetags
-------------- init . py
--------------templates_extras.py
------- init . py
-------settings.py
- manage.py
Vous devez vous assurer de ce qui suit:
votre application elle-même, dans laquelle vos "modèles" sont résidents, est actuellement installée dans INSTALLED_APPS dans settings.py (par exemple, "Nom_Application")
votre module de balises lui-même qui existe dans "templatetags" est déjà installé dans INSTALLED_APP dans settings.py (par exemple, "ApplicationName.templatetags.tempaltes_extras")
assurez-vous que vous avez " init . py" dans le répertoire templatetags
vous devez redémarrer le serveur
Dans certains cas, vous devez supprimer tous les fichiers * .pyc générés, si cela ne fonctionne pas, puis réessayez.
Je recevais la même erreur mais pour une raison différente alors je vais vous le dire (au cas où quelqu'un d'autre aurait le même problème).
Tout était correct, mais ma balise personnalisée se trouvait dans un dossier nommé template_tags
et, après une longue recherche, j'ai découvert qu'il devait s'agir de templatetags
et maintenant, cela fonctionne. Donc vérifiez que le nom du dossier est exactement templatetags
.
"balises personnalisées" n'est pas une erreur de bibliothèque de balises valide, mais le plus souvent, les balises personnalisées ne sont pas chargées dans l'application.
placez un init . py vide dans le même dossier que votre "balise de modèle personnalisé" et exécutez le code ci-dessous sur le terminal pour charger les balises de modèle personnalisées
touch __init__.py
Pour les autres confrontés à cela. Supposons que votre nom d'application est MyApp
et que votre nom de dossier de balise est templatetags
, puis dans settings.py
vous devriez avoir
INSTALLED_APPS = [
'MyApp',
'MyApp.templatetags'
]
Votre application Django et votre dossier de balises qui se trouve sous votre package d’application y sont nécessaires.
-> MyApp
---> models.py
---> views.py
---> templatetags
-----> __init__.py
-----> app_filters.py
Et dans votre fichier de modèle:
{% load app_filters %}
Aussi app_filters.py
être comme:
# coding=utf-8
from Django import template
register = template.Library()
@register.filter(name='get_item')
def get_item(dictionary, key):
return dictionary.get(key)
vérifiez toutes les étapes ci-dessus et vous pouvez trouver le problème.
Assurez-vous d’initialiser votre dossier templatetags avec python. Si vous avez un doute, prenez simplement le contrôle de tous les fichiers,
Supprimez tous les fichiers, Dans le dossier templatetags, créez uniquement le fichier init . Py.
Votre dossier est maintenant sous Python, alors faites votre travail.
Cela fonctionne pour moi ...
Assurez-vous que la déclaration load
est correcte. Ce devrait être le nom du fichier, pas le nom de l'application. Par exemple, si vous avez cette application:
appname
├── __init__.py
├── templatetags
│ ├── __init__.py
│ └── foobarfilename.py
Ensuite, vous devriez mettre ceci dans votre modèle:
{% load foobarfilename %}
Bien sûr, vous devriez aussi vérifier les autres réponses.
Pour moi, c'était l'erreur de mettre des guillemets autour du nom de la bibliothèque dans la balise load
.
FAUX: {% load 'library_name' %}
CORRECT: {% load library_name %}
Reportez-vous à d'autres réponses aussi. J'ai aussi résolu quelques problèmes avant d'atterrir ici.
Une fois que vous avez créé la balise de modèle et qu'elle devrait figurer dans le package 'templatetags' d'une application installée dans les paramètres.INSTALLED_APPS, assurez-vous de redémarrer votre serveur de développement.
Peut-être que quelqu'un trouvera cela utile: j'avais nommé le répertoire 'templatetags '
au lieu de 'templatetags'
, c'est-à-dire avec un espace à la fin. A pris des heures pour enfin réaliser.
Dans mon cas c'était - j'utilise
@register.inclusion_tag('template-to-use.html')
J'ai oublié de créer ce modèle et tout de suite, il a commencé à fonctionner. Je sais que les réponses ci-dessus sont davantage liées à la plupart des problèmes - mais j'espère que quelqu'un le trouvera utile. Cela aurait dû me parvenir:
Template does not exist
mais cela n'a pas fonctionné.
Dans mon cas, le problème était que j'utilisais {% load filter_method_name %}
Je devais changer pour {% filename %}
Tous les conseils énumérés ici ne m'ont pas aidé. Donc, dans mon cas particulier, le problème était que le modèle devait être chargé à partir d'une application tierce et que je copiais manuellement le dossier source avec cette application dans le dossier src
de mon virtualenv. Ensuite, j'ai exécuté python setup.py install
dans ce dossier. Après cela, Django n'a pas pu charger ce module.
Ensuite, j'ai supprimé le dossier source et installé de cette application et l'a installée à l'aide de pip install -r requirements.txt
après avoir ajouté une ligne pertinente dans le fichier requirements.txt
. Il a été téléchargé dans le dossier src
, installé et tout a commencé à fonctionner correctement. J'espère que ça aide quelqu'un.
Dans mon cas, j'ai créé une instance de bibliothèque en utilisant tag variable au lieu de register variable
tag = template.Library()
Mais ça devrait être
register = template.Library()
Pour être une bibliothèque de balises valide, le module doit contenir un niveau de module variable nommée register qui est une instance de template.Library, dans laquelle tous les tags et filtres sont enregistrés