[django] Django 1.10.1 ‘my_templatetag’는 등록 된 태그 라이브러리가 아닙니다. 다음 중 하나 여야합니다.

나는 당신이 어떤 그룹에 속해 있는지에 따라 맞춤 메뉴를 원합니다. Django 1.10.1, allauth 등을 사용하고 있습니다. 내 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 %}

수백만 번처럼 서버를 다시 시작하려고 시도했으며 모든 이름을 변경하려고 시도했으며 앱은 settings.py에서 INSTALLED_APPS의 일부입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?



답변

my_templatetag.py내부 app_name/templatetags에 넣는 것 외에도 템플릿 태그를 수정할 때마다 Django 개발 서버를 다시 시작하거나 자체적으로 다시 시작했는지 확인하십시오. 서버가 다시 시작되지 않으면 Django는 태그를 등록하지 않습니다.


답변

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

            }
    },
},

]


답변

다음 단계가 누락되지 않았는지 확인하십시오.

  1. 애플리케이션 폴더의 models.py 및 views.py와 동일한 수준에 “templatetags”라는 폴더를 만듭니다.

  2. 애플리케이션은 settings.py의 INSTALLED_APPS에 있어야합니다.

  3. templatetags 폴더에는 __init__.py가 있어야합니다.

  4. 장고 서버 다시 시작


답변

제 경우에는 문제가 {% load filter_method_name %}

나는 변경해야했다 {% load filename %}

그런 다음 서버 를 다시 시작 해야했습니다 .


답변

‘my_templatetag.py’는 어디에 저장됩니까? 앱 내에있는 ‘templatetags’라는 디렉토리에 저장되어야합니다.

그렇지 않은 경우 https://docs.djangoproject.com/en/dev/howto/custom-template-tags/를 참조하십시오 .


답변

django 서버를 다시 시작하십시오. 앱 내에서 templatetag 폴더를 설정하고 templatetag 폴더에서 template_name.py를 설정하면 저에게 효과적이었습니다.


답변

누군가에게 도움이되는 경우 태그를로드하려고 할 때 따옴표를 사용하는 것이 문제였습니다.

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

대신에

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

참고 : extends파일 이름을 따옴표로 묶어야하지만load