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?
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.
à 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',
}
},
},
]
assurez-vous de ne manquer aucune des étapes suivantes:
Créer un dossier appelé "templatetags" au même niveau que models.py et views.py dans votre dossier d'application
votre application doit être dans L'INSTALLED_APPS dans settings.py
le dossier templatetags doit contenir __init__.py
redémarrez le serveur django
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.
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.
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é.