Chcę menu, które jest niestandardowe w zależności od tego, do której grupy należysz. Używam Django 1.10.1, allauth i tak dalej. Kiedy próbuję utworzyć mój szablon szablonu, kończy się to niepowodzeniem i jest na nim napis: ¨
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” wygląda następująco:
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()
a błąd pojawia się w moim pliku .html, który mówi:
{% load my_templatetag %}
Próbowałem zrestartować serwer miliony razy, próbowałem też zmienić wszystkie nazwy, a aplikacja jest częścią INSTALLED_APPS w settings.py. Co ja robię źle?
django
django-allauth
templatetags
Sliljedal
źródło
źródło
Od wersji django 1.9 możesz załadować te nowe tagi / filtry w takich ustawieniach:
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', } }, },
]
źródło
Upewnij się, że nie brakuje żadnego z następujących kroków:
Utwórz folder o nazwie „templatetags” na tym samym poziomie co modeles.py i views.py w folderze aplikacji
Twoja aplikacja musi znajdować się w INSTALLED_APPS w settings.py
Folder templatetags musi mieć __init__.py
Zrestartuj serwer django
źródło
default_app_config = 'custom_admin.apps.Config'
. W przeciwnym razie Django 1.10 nie ładuje templatetags. Nie widzę tego wyraźnie w dokumentach.__ini__.py
, ale czy wiesz, dlaczego kiedyś działało w Python3, ale nie w Python2?W moim przypadku problem polegał na tym, że używałem
{% load filter_method_name %}
Musiałem się zmienić
{% load filename %}
Następnie musiałem zrestartować serwer.
źródło
Gdzie jest przechowywany plik „my_templatetag.py”? Powinien być przechowywany w katalogu o nazwie „templatetags”, który znajduje się w aplikacji.
Zobacz: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/, jeśli tak nie jest.
źródło
Zrestartuj serwer django. U mnie zadziałało po ustawieniu folderu templatetag w aplikacji i template_name.py w folderze templatetag.
źródło
Na wypadek, gdyby to komuś pomogło, problem w moim przypadku polegał na tym, że próbowałem załadować tag (y)
{% load 'my_templatetag' %} <!-- incorrect -->
zamiast
{% load my_templatetag %} <!-- correct -->
Uwaga:
extends
wymaga cudzysłowów wokół nazwy pliku, ale nieload
źródło
musisz ręcznie zatrzymać serwer deweloperski i uruchomić go ponownie, aby Django mógł zidentyfikować nowe znaczniki szablonu
źródło
Używam Django 1.11 i miałem ten sam problem. Niektóre odpowiedzi są prawidłowe, ale niektórych może brakować. Oto co zrobiłem:
Cytując poprzedniego użytkownika:
Ale zanim ponownie uruchomisz serwer Django, dodaj to do pliku zawierającego tagi:
from django import template register = template.Library()
Następnie możesz ponownie uruchomić serwer.
źródło
Wiem, że to trochę stare, ale dzisiaj napotkałem ten sam problem. Rozwiązanie znalazłem w dokumentach: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
Po prostu skopiowanie __init__.py z innej lokalizacji do katalogu nowego szablonu templatetag rozwiązało problem.
źródło
Rozwiązałem to, dodając folder templatestag w katalogu głównym z plikiem filter.py definiującym moje filtry, a następnie dostosowałem ustawienia settings.py .
Proszę sprawdzić moją pełną odpowiedź dotyczącą tego problemu w tym podobnym wątku
źródło
umieść my_templatetag.py w app_name / templatetags, a następnie utwórz init .py w app_name / templatetags .. Następnie otwórz terminal w folderze projektu i wydaj polecenie python manage.py shell
źródło
po prostu wycinasz / usuwasz kod, który został zapisany w (przykład templatetags / home.py) z home.py usuwasz kod i restartujesz serwer i ponownie wklejasz kod w home.py, to zadziała.
źródło
Tak, ten problem, z którym się obecnie borykasz, spowodowany starszą wersją django lub napisanie "Amortyzacja"
Jeśli masz te typy znaków w swoim szablonie / plikach HTML, zmień je za pomocą ...
> {{% load staticfiles %} or {% load admin_static %}, {% load > admin_static %}}
zamienić z
{% load static %}
Przejdź do sedna sprawy ... Po prostu wykonaj te czynności Zastąp wszystkie te z TWOJEGO BAse.html / lub dowolnego typu kodu HTML
źródło
najpierw zatrzymaj serwer. usuń / wytnij kod z templatetags / tag.py i przepisz / wklej go. następnie uruchom serwer. zadziałało dla mnie
źródło