web-dev-qa-db-fra.com

Django: 'current_tags' n'est pas une bibliothèque de balises valide

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?

72
snakile

Je suggérerais ce qui suit:

  1. (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.

  2. Assurez-vous que l'application qui inclut la bibliothèque de balises est enregistrée dans settings.py sous INSTALLED_APPS.

  3. 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/

79
mif

J'ai eu ce problème et résolu en ajoutant un fichier __init__.py vierge dans mon répertoire appname/templatetags /.

74
ty.

Les possibilités sont nombreuses:

  1. Vous n'avez pas réinitialisé votre serveur dev .
  2. Vous avez dépendance dépendance dans le fichier templatetag.
  3. Vous mal orthographié quelque chose (répertoire, dossier, nom du modèle dans 'load', etc.).
  4. Vous avez oublié d'ajouter l'application à INSTALLED_APPS .
62
Ctrl-C

Redémarrez le serveur a résolu le problème pour moi. Ils doivent l'avoir mentionné dans la documentation.

9
Krishnadas PC

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. 

6
msoliman

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.

6
steven2308

"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
5
Pawan Kumar

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.

3
AmiNadimi

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 ...

3
Mohamed

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.

2
Flimm

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.

2
manu

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.

2
Liyosi

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.

1
Eran Goldin

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é.

0
Radek

Dans mon cas, le problème était que j'utilisais {% load filter_method_name %}

Je devais changer pour {% filename %}

0

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.

0
Dennis Golomazov

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

0
dhana