Django 1.10.1 'my templatetag' n'est pas une bibliothèque d'étiquettes enregistrée. Doit être l'un des:

je veux un menu personnalisé en fonction du groupe auquel vous appartenez. J'utilise Django 1.10.1, allauth et ainsi de suite. Quand j'essaie de faire de 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 cette erreur vient dans mon .fichier html qui dit,

{%  load my_templatetag %}

j'ai essayé de redémarrer le serveur comme des millions de fois, j'ai aussi essayé de changer tous les noms, et l'application fait partie de INSTALLED_APPS settings.py. Ce que je fais mal?

27
demandé sur Sliljedal 2016-11-19 00:28:17

8 réponses

a part mettre my_templatetag.py à l'intérieur app_name/templatetags, assurez-vous que vous redémarrez le serveur de développement Django (ou assurez-vous qu'il redémarre lui-même) chaque fois que vous modifiez les balises de template. Si le serveur ne redémarre pas, Django n'enregistre pas les balises.

43
répondu lmiguelvargasf 2017-03-18 23:24:52

à partir de django 1.9, vous pouvez charger ces nouvelles balises / filtres dans des paramètres comme ceci:

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',

            }
    },
},

]

29
répondu Dat TT 2017-06-09 09:47:09

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

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

  2. votre application doit être dans L'INSTALLED_APPS dans settings.py

  3. le dossier templatetags doit contenir __init__.py

  4. redémarrez le serveur django

16
répondu Heapify 2017-11-02 21:44:37

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

voir: https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/ si ce n'est pas le cas.

3
répondu zubhav 2016-11-19 00:35:02

redémarrez le serveur django. Il a fonctionné pour moi après avoir défini le dossier templatetag dans l'application et template_name.py dans le dossier templatetag.

2
répondu Anish Ravula 2017-08-17 06:40:44

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 doc: https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/

L'application doit contenir un templatetags répertoire, au même niveau que models.py, views.py, etc. Si cela n'existe pas déjà, créez - n'oubliez pas la __init__.py fichier pour s'assurer que le répertoire est traité comme un paquet Python.

il suffit de copier _Je ne sais pas. init__.py d'un autre endroit dans le nouveau répertoire des templatetags l'a trié.

0
répondu Chris Shaw 2017-06-13 11:44:27

put my_templatetag.py à l'intérieur d'app_name / templatetags puis créer init