Django 1.10.1 'my_templatetag' не является зарегистрированной библиотекой тегов. Должен быть одним из:

Я хочу, чтобы меню было индивидуальным, в зависимости от того, к какой группе вы принадлежите. Я использую Django 1.10.1, allauth и так далее. Когда я пытаюсь сделать свой шаблонный тег, он терпит неудачу и говорит: ¨

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' выглядит так:

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()

и в моем файле .html появляется ошибка, в которой говорится:

{%  load my_templatetag %}

Я пытался перезапустить сервер миллионы раз, также я пытался изменить все имена, и приложение является частью INSTALLED_APPS в settings.py. Что я делаю не так?


person Sliljedal    schedule 18.11.2016    source источник


Ответы (16)


Помимо помещения my_templatetag.py внутрь app_name/templatetags, убедитесь, что вы перезапускаете сервер разработки Django (или убедитесь, что он перезапускается сам) каждый раз, когда вы изменяете теги шаблона. Если сервер не перезапустится, Django не зарегистрирует теги.

person lmiguelvargasf    schedule 18.03.2017
comment
Для меня это был отсутствующий __init__.py в папке templatetags... - person zypro; 22.03.2019
comment
Этот. Можно потратить неприлично много времени на отладку чего-то, что будет работать, если вы просто перезапустите... - person logicOnAbstractions; 04.05.2021

Начиная с Django 1.9, вы можете загружать эти новые теги/фильтры в настройках следующим образом:

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

]

Если у вас есть каталог templatetag в каталоге вашего проекта (не в каталоге приложения), рекомендуется использовать описанный выше метод.

Пример:
введите здесь описание изображения

Цитата: https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/#:%7E:text=It%20also%20enables%20you%20to%20register%20tags%20без%20установки%20приложения%20.

person Dat TT    schedule 19.04.2017
comment
Это сработало и для меня. На самом деле это может быть выбранный ответ на вопрос. Я использую версию django 2.0 на случай, если кому-то интересно. - person R.R.C.; 19.02.2018
comment
это позволило мне использовать пользовательский тег для всего проекта - person dangel; 04.06.2019
comment
это также работает, если вам нужно перезаписать определенные теги шаблонов пакета сайта - person Nico M; 19.05.2020
comment
Это должен быть ответ: я использую Django 3.x. - person FearlessFuture; 28.05.2020
comment
Где вы нашли это объяснение. в документах об этом не сказано, но это единственное, что сработало для меня. - person benji8; 19.02.2021
comment
Это правильный ответ - person matshidis; 11.06.2021

Убедитесь, что вы не пропустили ни один из следующих шагов:

  1. Создайте папку с именем «templatetags» на том же уровне, что и models.py и views.py в папке вашего приложения.

  2. Ваше приложение должно быть в INSTALLED_APPS в settings.py

  3. Папка templatetags должна иметь __init__.py

  4. Перезапустите сервер джанго.

person Heapify    schedule 02.11.2017
comment
Мне кажется, что все мои приложения требуют, чтобы apps.py и init.py содержали default_app_config = 'custom_admin.apps.Config'. В противном случае Django 1.10 не загружает теги шаблонов. Однако я не вижу этого явно в документах. - person Chris Sattinger; 06.02.2018
comment
Спасибо! Я забыл добавить __ini__.py, но знаете ли вы, почему раньше это работало в Python3, но не в Python2? - person Farzad Abdolhosseini; 05.04.2018
comment
Меня каждый раз достает перезагрузка! Спасибо за напоминание о #4 ^^ - person Marc; 24.04.2018
comment
Пункт № 4 помог мне перезапустить сервер Django, чтобы Django мог идентифицировать новые теги шаблона. - person Feras; 27.10.2018

В моем случае проблема заключалась в том, что я использовал {% load filter_method_name %}

Мне пришлось перейти на {% load filename %}

Затем мне пришлось перезапустить сервер.

person Shamsul Arefin Sajib    schedule 17.07.2019
comment
Перезагрузите сервер, такое простое решение для надоедливой ошибки - person Ahmed I. Elsayed; 29.09.2019
comment
Имя файла было для меня. Спасибо! - person ravioli; 08.05.2020
comment
@ravioli да, очень тонкая вещь, на которую стоит обратить внимание - person Shamsul Arefin Sajib; 10.05.2020
comment
Благодарю вас! Я полностью упустил это из виду, так как предполагал, что мне нужно загрузить метод, а не сам модуль. - person Majestic Pixel; 22.08.2020
comment
Перезагрузите сервер - person Rafi khan; 11.07.2021
comment
@Rafikhan Я не публиковал это решение, пока не попробовал только перезапустить. Пробовал перезапускать, не помогло. Затем исправил мою ошибку в коде и перезапустил - person Shamsul Arefin Sajib; 12.07.2021

вам нужно вручную остановить сервер разработки и запустить его снова, чтобы Django мог идентифицировать новые теги шаблона

person anakyou    schedule 01.09.2020

Где хранится «my_templatetag.py»? Он должен храниться в каталоге под названием «templatetags», который находится в приложении.

См.: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/, если это не так.

person zubhav    schedule 19.11.2016
comment
Спасибо, это было название карты! - person Sliljedal; 19.11.2016

Перезапустите сервер джанго. У меня это сработало после установки папки templatetag в приложении и template_name.py в папке templatetag.

person Anish Ravula    schedule 17.08.2017

Я использую Django 1.11, и у меня была такая же проблема. Некоторые из ответов здесь правильные, но некоторые вещи могут отсутствовать. Вот что я сделал:

Цитирую предыдущего пользователя:

Создайте папку с именем «templatetags» на том же уровне, что и models.py и views.py в папке вашего приложения.

Ваше приложение должно быть в INSTALLED_APPS в settings.py

В папке templatetags должен быть файл init.py.

Но прежде чем перезапустить сервер Django, добавьте это в файл, содержащий теги:

from django import template
register = template.Library()

Затем вы можете перезапустить сервер.

person Roddy P. Carbonell    schedule 09.01.2019
comment
Это сработало для меня, когда я использовал «init.py» вместо «init.py». - person William; 07.09.2019
comment
Какая разница между двумя? Один выделен жирным шрифтом, другой обычным шрифтом, не могу понять ваше утверждение @William - person aspiring1; 01.03.2021
comment
Похоже, что символы подчеркивания теперь выделены жирным шрифтом в комментариях stackoverflow :) Я написал init.py с двумя символами подчеркивания по обе стороны от «init». См. Ответ Криса Шоу в качестве примера. - person William; 01.03.2021

Если это кому-то поможет, проблема в моем случае заключалась в том, что я использовал кавычки при попытке загрузить тег (и)

{%  load 'my_templatetag' %}  <!-- incorrect -->

вместо

{%  load my_templatetag %}  <!-- correct -->

Примечание. extends требует кавычек вокруг имени файла, но не load.

person Anupam    schedule 17.10.2019
comment
Это была моя проблема! - person elplatt; 12.02.2020

Я знаю, что это немного устарело, но сегодня я столкнулся с той же проблемой. Я нашел решение в документации: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

Приложение должно содержать каталог templatetags на том же уровне, что и models.py, views.py и т. д. Если его еще нет, создайте его — не забудьте файл __init__.py, чтобы каталог считался пакет Python.

Просто скопировав __init__.py из другого места в каталог нового тега шаблона, все уладилось.

person Chris Shaw    schedule 13.06.2017

Я решил эту проблему, добавив в корень папку templatestag с файлом filter.py, определяющим мои фильтры, а затем изменил файл settings.py.

Пожалуйста, проверьте мой полный ответ по этой проблеме в этой похожей теме

person LucianoBAF    schedule 18.12.2020

поместите my_templatetag.py внутрь app_name/templatetags, затем создайте init.py внутри app_name/templatetags. Затем откройте терминал в папке проекта и введите команду python manage.py shell

из app_name.templatetags импортировать my_templatetag

person Kiran Bachhav.    schedule 12.12.2017
comment
внутри папки templatetags создайте пустой файл с именем init.py - person Kiran Bachhav.; 12.12.2017
comment
Пожалуйста, отредактируйте свой ответ, включив в него все детали и отформатировав его так, чтобы он был удобочитаемым (при необходимости используйте форматирование кода). - person Melebius; 12.12.2017

вы просто вырезаете/удаляете свой код, который написан внутри (пример templatetags/home.py) из home.py, вы удаляете свой код и перезагружаете сервер и снова вставляете свой код в home.py, он будет работать.

person Rahul Verma    schedule 27.01.2018

Да, эта проблема, с которой вы сейчас сталкиваетесь, из-за более старой версии django или сложно написать амортизацию

если у вас есть эти типы тегов в вашем шаблоне / HTML-файлах, измените их с помощью ..

> {{% load staticfiles %} or  {% load admin_static %}, {% load
> admin_static %}}

изменить с


{% load static %}

Перейдем к делу. Просто выполните эти действия, замените все из вашего BAse.html/или любого типа HTML

person Ash    schedule 16.12.2020
comment
Можете ли вы исправить это беспорядочное описание? Мне трудно понять ваше объяснение. Пожалуйста, также исправьте форматирование кода. См. Как ответить - person Gander; 16.12.2020

Папка templatetags должна иметь файл __init__.py, чтобы быть обычным пакет Python

Убедитесь, что вы также создали файл templatetags.py рядом с файлом __init__.py.

person Shubham Patil    schedule 25.05.2021

сначала остановите сервер. удалите/вырежьте код из templatetags/tag.py и перепишите/вставьте его. затем запустите сервер. у меня это сработало

person shomit    schedule 15.06.2020
comment
Как поможет вырезание, а затем вставка обратно кода? Если вы видите ошибку в примере кода вопроса, укажите на нее. - person Ben; 15.06.2020