web-dev-qa-db-fra.com

Django 1.10.1 'my_templatetag' n'est pas une bibliothèque de balises enregistrée. Doit être l'un des:

Je veux un menu personnalisé selon le groupe auquel vous appartenez . J'utilise Django 1.10.1, allauth, etc. Quand j'essaie de faire mon templatetag il échoue et il dit: ¨

TemplateSyntaxError at /
'my_templatetag' is not a registered tag library. Must be one of:
account
account_tags
admin_list
admin_modify
admin_static
admin_urls
cache
i18n
l10n
log
socialaccount
socialaccount_tags
static
staticfiles
tz

'my_templatetag.py' ressemble à ceci:

from Django import template
from Django.contrib.auth.models import Group


register = template.Library()

@register.filter(name='has_group')
def has_group(user, group_name):
    group =  Group.objects.get(name=group_name)
    return group in user.groups.all()

et l’erreur vient dans mon fichier .html qui dit,

{%  load my_templatetag %}

J'ai essayé de redémarrer le serveur des millions de fois, j'ai aussi essayé de changer tous les noms, et l'application fait partie d'INSTALLED_APPS dans settings.py .

36
Sliljedal

En plus de placer my_templatetag.py dans app_name/templatetags, assurez-vous de redémarrer le serveur de développement Django (ou assurez-vous qu'il se redémarre lui-même) chaque fois que vous modifiez les balises de modèle. Si le serveur ne redémarre pas, Django n'enregistrera pas les tags.

66
lmiguelvargasf

À partir de Django 1.9, vous pouvez charger ces nouveaux tags/filtres dans des paramètres tels que:

TEMPLATES = [
{
    'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'Django.template.context_processors.debug',
            'Django.template.context_processors.request',
            'Django.contrib.auth.context_processors.auth',
            'Django.contrib.messages.context_processors.messages',
            'app.apptemplates.load_setting',

        ],

        'libraries':{
            'my_templatetag': 'app.templatetags.my_templatetag',

            }
    },
},

]

34
Dat TT

Assurez-vous de ne manquer aucune des étapes suivantes:

  1. Créez un dossier appelé "templatetags" au même niveau que models.py Et views.py dans votre dossier d'application.

  2. Votre application doit figurer dans INSTALLED_APPS dans settings.py

  3. Le dossier templatetags doit avoir __init__.py

  4. Redémarrez le serveur Django

20
Heapify

Où est stocké 'my_templatetag.py'? Il devrait être stocké dans un répertoire appelé "templatetags" qui se trouve dans l'application.

Veuillez consulter: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ Si ce n'est pas le cas.

3
zubhav

Redémarrez le serveur Django. Cela a fonctionné pour moi après avoir défini le dossier templatetag dans l'application et template_name.py dans ce dossier.

2
Anish Ravula

J'utilise Django 1.11 et j'avais le même problème. Certaines des réponses ici sont exactes, mais il se peut que certaines choses manquent. Voici ce que j'ai fait:

Citer un utilisateur précédent:

Créez un dossier appelé "templatetags" au même niveau que models.py et views.py dans votre dossier d'application

Votre application doit figurer dans INSTALLED_APPS dans settings.py

Le dossier templatetags doit avoir init . Py

Mais avant de redémarrer le serveur Django, ajoutez ceci au fichier qui contient les tags:

from Django import template
register = template.Library()

Ensuite, vous pouvez redémarrer le serveur.

0
Roddy P. Carbonell

vous venez de couper/supprimer votre code qui est écrit dans le (exemple, templatetags/home.py) de home.py vous supprimez votre code et redémarrez votre serveur et collez à nouveau votre code dans home.py cela fonctionnera.

0
Rahul Verma

Je sais que c'est un peu vieux, mais j'ai rencontré le même problème aujourd'hui. J'ai trouvé la solution dans la documentation: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

L’application doit contenir un répertoire templatetags, au même niveau que models.py, views.py, etc. S'il n'existe pas déjà, créez-le. un paquet Python.

Il suffit de copier le fichier __init__.py depuis un autre emplacement dans le nouveau répertoire du modèle.

0
Chris Shaw

placez my_templatetag.py dans app_name/templatetags puis créez init . py dans app_name/templatetags .. Ouvrez ensuite le terminal dans le dossier du projet en donnant la commande python manage.py Shell

depuis app_name.templatetags importer my_templatetag

0
Kiran Bachhav.