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 .
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.
À 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',
}
},
},
]
Assurez-vous de ne manquer aucune des étapes suivantes:
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
Redémarrez le serveur Django
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.
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.
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.
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.
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.
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