2016-11-18 1 views
13

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

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. Что я делаю неправильно?

ответ

23

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

11

С Джанго 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', 

      } 
    }, 
}, 

]

+0

Большое спасибо за это :) Не удалось заставить его работать другим способом. – Jonathan

+0

Спасибо, это сработало для меня! – RockOnGom

+0

Это сработало и для меня. Это может быть фактически выбранный ответ на вопрос. Я использую версию django версии 2.0, если люди задаются вопросом. – Doug

0

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

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

Простое копирование __init__.py из другого местоположения в новую папку templatetag отсортировано.

1

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

5

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

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

  2. Ваша заявка должна быть в INSTALLED_APPS в settings.py

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

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

+0

Мне кажется, что всем моим приложениям требуется apps.py и __init__.py, чтобы содержать 'default_app_config = 'custom_admin.apps.Config''. В противном случае Django 1.10 не загружает templatetags. Однако я не вижу этого явно в документах. – felix

0

положить my_templatetag.py внутри app_name/templatetags затем создать INIT .py внутри app_name/templatetags .. Затем откройте терминал в папке проекта дать команду питон manage.py оболочки

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

+0

внутри templatetags папка ящик пустой файл с именем __init__.py –

+0

Пожалуйста, [отредактируйте свой ответ] (https://stackoverflow.com/posts/47772135/edit), чтобы вставить в него все данные и форматировать его для чтения (используйте форматирование кода где это необходимо). – Melebius

0

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

Смежные вопросы