107 votes

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 c'est personnalisée en fonction du groupe auquel vous êtes membre de. Im en utilisant 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 tha erreur vient dans mon .fichier html qui disent,

{%  load my_templatetag %}

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

175voto

lmiguelvargasf Points 9693

En plus de mettre my_templatetag.py dans app_name/templatetags , assurez-vous de redémarrer le serveur de développement Django (ou de le redémarrer de 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.

101voto

Dat TT Points 911

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

            }
    },
},
 

]

46voto

Heapify Points 755

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

5voto

zubhav Points 723

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.

4voto

Anish Ravula Points 21

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 le dossier templatetag.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X