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


82

나는 당신이 어떤 그룹에 속해 있는지에 따라 맞춤 메뉴를 원합니다. 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의 일부입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변:


132

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


8
서버를 다시 시작합니다! 정말 감사합니다!
— FMCorz

2
나에게는 누락했다 __init__.py 에 templatetags 폴더 ...
— zypro

I에 유래를 좋아하는 이유입니다
— 오토 Shavadze

70

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

            }
    },
},

]


2
고마워요 :) 다른 방식으로 작동하지 못했습니다.
— Jonathan

1
그것은 나에게도 효과적이었습니다. 이것은 실제로 질문에 대한 답이 될 수 있습니다. 사람들이 궁금해 할 경우를 대비하여 django 2.0 버전을 사용하고 있습니다.
— RRC

이 날 전체 프로젝트에 대한 사용자 정의 태그를 사용할 수
— DANGEL

이것은 사이트 패키지의 특정 템플릿
— Nico M

이것이 답이 될 것입니다 : 저는 Django 3.x를 사용합니다.
— FearlessFuture

35

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

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

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

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

  4. 장고 서버 다시 시작


내 모든 앱에는 .py를 포함 하려면 apps.py 및 init .py가 필요합니다 default_app_config = 'custom_admin.apps.Config'. 그렇지 않으면 Django 1.10이 템플릿 태그를로드하지 않습니다. 나는 이것을 문서에서 명시 적으로 보지 않는다.
— Chris Sattinger

감사! 을 추가 __ini__.py하는 것을 잊었지만 Python3에서는 작동했지만 Python2에서는 작동하지 않는 이유를 알고 있습니까?
— Farzad Abdolhosseini

2
매번 나를 얻는 것은 다시 시작입니다! # 4에서 나에게 상기시켜 주신 Thx ^^
— Marc

포인트 # 4는 "Django 서버를 다시 시작"하는 데 도움이되었습니다. 그래서 Django는 새로운 템플릿 태그를 식별 할 수 있습니다.
— 페라

21

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

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

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


2
서버를 다시 시작하십시오. 성가신 버그에 대한 간단한 해결책
— Ahmed I. Elsayed

파일 이름은 나를위한 것입니다. 감사!
— ravioli

@ravioli 예, 주목해야 할 정말 미묘한 점
— Shamsul Arefin Sajib

감사합니다! 모듈 자체가 아니라 메서드를로드해야한다고 생각했기 때문에 이것을 완전히 간과했습니다.
— Majestic Pixel


3

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


3

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

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

대신에

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

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


이것은 내 문제였습니다!
— elplatt

3

개발 서버를 수동으로 중지하고 다시 시작해야 Django가 새 템플릿 태그를 식별 할 수 있습니다.


이 질문에는 이미 많은 답변이 있으며이 게시물은 다른 답변에서 언급되지 않은 내용을 추가하지 않습니다.
— Henry Woody

2

Django 1.11을 사용하고 있는데 동일한 문제가 발생했습니다. 여기에있는 답변 중 일부는 맞지만 일부는 누락되었을 수 있습니다. 내가 한 일은 다음과 같습니다.

이전 사용자 인용 :

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

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

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

그러나 Django 서버를 다시 시작하기 전에 태그가 포함 된 파일에 다음을 추가하십시오.

from django import template
register = template.Library()

그런 다음 서버를 다시 시작할 수 있습니다.


이것은 'init.py'대신 ' init .py'를 사용할 때 저에게 효과적이었습니다.
— William

1

나는 이것이 조금 오래되었다는 것을 알고 있지만 오늘도 같은 문제에 직면했습니다. 문서에서 해결책을 찾았습니다 : https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

앱은 models.py, views.py 등과 같은 수준의 templatetags 디렉토리를 포함해야합니다. 이것이 아직 존재하지 않는 경우 생성하십시오. __init__.py 파일을 잊지 말고 디렉토리가 다음과 같이 처리되는지 확인하십시오. Python 패키지.

다른 위치에서 __init__.py를 새 템플릿 태그의 디렉토리로 복사하기 만하면 정렬됩니다.


1

필터를 정의 하는 filter.py 파일이 있는 루트에 templatestag 폴더를 추가하여이 문제를 해결 한 다음 settings.py를 조정했습니다. .

이 유사한 스레드 에서이 문제에 대한 완전한 답변을 확인하십시오.


0

my_templatetag.py를 app_name / templatetags 안에 넣은 다음 app_name / templatetags 안에 init .py 를 생성 합니다 . 그런 다음 프로젝트 폴더에서 터미널을 열고 명령 python manage.py shell

app_name.templatetags에서 가져 오기 my_templatetag


내부 templatetags 폴더 상자 이름 init .py
— Kiran Bachhav의

2
제발 편집은 당신의 대답은 (사용 코드는 적절한 서식) 그것으로 모든 세부 사항을 놓고 읽을 수 있도록 포맷합니다.
— Melebius

0

home.py에서 (example templatetags / home.py) 안에 작성된 코드를 잘라내거나 제거하면 코드를 제거하고 서버를 다시 시작한 다음 다시 home.py에 코드를 붙여 넣으면 작동합니다.


0

Yah, 당신이 현재 직면하고있는이 문제는 이전 장고 버전 때문에 또는 복잡하게 "Depreciation"을 작성하기 때문입니다.

템플릿 / Html 파일에 이러한 유형의 태그가있는 경우 다음으로 변경됩니다.

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

변경


{% load static %}

요점에 도달 .. JUst 단순하게 수행하여 YOur BAse.html / 또는 모든 유형의 HTML에서 모두 대체


이 지저분한 설명을 수정할 수 있습니까? 당신의 설명을 이해하기 어렵습니다. 코드 형식도 수정하세요. 참조 답변하는 방법
— 아내와 별거중인 남편

-1

먼저 server.remove / cut the code from templatetags / tag.py and rewrite / paste it. then run the server.


2
잘라낸 다음 코드에 다시 붙여 넣으면 어떻게 도움이 될까요? 질문의 샘플 코드에 오류가있는 경우이를 지적하십시오.
— Ben
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.