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__.pytemplatetags 폴더 ...
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.