Ich möchte ein benutzerdefiniertes Menü, je nachdem, welcher Gruppe Sie angehören. Ich benutze Django 1.10.1, allauth und so weiter. Wenn ich versuche, mein Templatetag zu erstellen, schlägt dies fehl und es heißt: ¨
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' sieht folgendermaßen aus:
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()
und der Fehler kommt in meiner .html-Datei, die sagt,
{% load my_templatetag %}
Ich habe wie millionenfach versucht, den Server neu zu starten, außerdem habe ich versucht, alle Namen zu ändern, und die App ist Teil von INSTALLED_APPS in settings.py. Was mache ich falsch?
quelle
Ab Django 1.9 können Sie diese neuen Tags / Filter in folgenden Einstellungen laden:
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', } }, },
]]
quelle
Stellen Sie sicher, dass Sie keinen der folgenden Schritte verpassen:
Erstellen Sie einen Ordner mit dem Namen "templatetags" auf derselben Ebene wie models.py und views.py in Ihrem Anwendungsordner
Ihre Anwendung muss sich in INSTALLED_APPS in settings.py befinden
Der Templatetags-Ordner muss __init__.py haben
Starten Sie den Django-Server neu
quelle
default_app_config = 'custom_admin.apps.Config'
. Andernfalls lädt Django 1.10 keine Vorlagen-Tags. Ich sehe dies jedoch nicht explizit in den Dokumenten.__ini__.py
, aber wissen Sie, warum es in Python3 funktioniert hat, aber nicht in Python2?In meinem Fall war das Problem, das ich benutzte
{% load filter_method_name %}
Ich musste umziehen
{% load filename %}
Ich musste dann den Server neu starten .
quelle
Wo ist 'my_templatetag.py' gespeichert? Es sollte in einem Verzeichnis namens "Templatetags" gespeichert werden, das sich in der App befindet.
Weitere Informationen finden Sie unter: https://docs.djangoproject.com/de/dev/howto/custom-template-tags/, falls dies nicht der Fall ist.
quelle
Starten Sie den Django-Server neu. Es funktionierte für mich, nachdem ich den Ordner templatetag in der App und template_name.py im Ordner templatetag festgelegt hatte.
quelle
Falls es jemandem hilft, bestand das Problem in meinem Fall darin, dass ich beim Laden der Tags Anführungszeichen verwendet habe.
{% load 'my_templatetag' %} <!-- incorrect -->
anstatt
{% load my_templatetag %} <!-- correct -->
Hinweis:
extends
Benötigt Anführungszeichen um den Dateinamen, aber nichtload
quelle
Ich verwende Django 1.11 und hatte das gleiche Problem. Einige der Antworten hier sind richtig, aber einige Dinge fehlen möglicherweise. Folgendes habe ich getan:
Einen vorherigen Benutzer zitieren:
Bevor Sie den Django-Server neu starten, fügen Sie dies der Datei hinzu, die die Tags enthält:
from django import template register = template.Library()
Dann können Sie den Server neu starten.
quelle
Sie müssen den Entwicklungsserver manuell stoppen und erneut starten, damit Django die neuen Vorlagen-Tags identifizieren kann
quelle
Ich weiß, dass dies ein bisschen alt ist, aber ich bin heute auf das gleiche Problem gestoßen. Ich habe die Lösung in den Dokumenten gefunden: https://docs.djangoproject.com/de/dev/howto/custom-template-tags/
Durch einfaches Kopieren der Datei __init__.py von einem anderen Speicherort in das Verzeichnis des neuen Vorlagen-Tags wurde sie sortiert.
quelle
Fügen Sie my_templatetag.py in app_name / templatetags ein und erstellen Sie init .py in app_name / templatetags. Öffnen Sie dann das Terminal im Projektordner und geben Sie den Befehl python manage.py shell
quelle
Sie schneiden / entfernen einfach Ihren Code, der in der (Beispiel-Templatetags / home.py) von home.py geschrieben ist. Sie entfernen Ihren Code und starten Ihren Server neu und fügen Ihren Code erneut in home.py ein. Es wird funktionieren.
quelle
Stoppen Sie zuerst den Server. Entfernen / schneiden Sie den Code aus templatetags / tag.py und schreiben Sie ihn neu / fügen Sie ihn ein. Führen Sie dann den Server aus. Es hat bei mir funktioniert
quelle