2017-12-26 23 views
0

저는 Django 2.0을 사용하고 있습니다.장고 2.0에서 사용자 정의 templatetags를 사용할 수 없습니다

나는 notes 내가이 파일

from django import template 
from django.template.defaultfilters import stringfilter 
from notepad.utils import simplify_text 
from notes.models import Note, ColorLabels 

register = template.Library() 


@register.filter(name='note_simplify') 
@stringfilter 
def note_simplify(value): 
    return simplify_text(value) 


@register.filter(name='default_color_label') 
def default_color_label(): 
    default_label = ColorLabels.objects.filter(default=True).first() 
    print(default_label.value) 
    return default_label 

내부와 template 파일 내부에 몇 가지 사용자 정의 태그를 작성한 응용 프로그램 디렉토리

입니다 notes/templatetags/note_tags.py 파일 내 템플릿에 사용할 수있는 몇 가지 사용자 정의 템플릿 태그를 작성했습니다 , 태그를

{% load note_tags %} 

으로로드했습니다. 첫 번째 태그 note_simplify을 사용하지만 두 번째 태그 default_color_label은 호출되지 않습니다. 동일한 파일에서 두 태그를 모두 사용하고 있습니다. 전달 된 데이터를 수정하기위한 것이고 간단히 무언가를 인쇄하기위한 것

# modify the note.content 
<p>{{ note.content|truncatechars:200|note_simplify }}</p> 

# to print some value 
{{ default_color_label.value }} 

나는 또한 여러 번 서버를 리콜했습니다.

문제가 있습니까? 태그가 템플릿에서 호출되지 않는 이유는 무엇입니까?

답변

1

템플릿에 개체를 넣으려면 simple_tag이 필요합니다.

@register.simple_tag 
def default_color_label(): 
    default_label = ColorLabels.objects.filter(default=True).first() 
    return default_label 

HTML 형식으로 사용할 수 있습니다.

{% default_color_label as variable %} 
{{ variable.value }} 

참고 : 당신을 태그 할 filter을 정의하고 또한 당신이 잘못을 사용하고 있습니다. 템플릿 필터는 항상 파이프 연산자와 함께 사용됩니다.

assignment_tag {{ somevalue|default_color_label }}

UPDATE 1.9simple_tag 지금 템플릿 변수의 결과를 저장할 수 있고, 대신에 표기되지 않는 버전 이후.

+0

' 'Library'객체에 'assignment_tag'' 속성의 오류가 없습니다. –

+1

assignment_tag 데코레이터는 1.9에서 사용되지 않으며 2.0에서 제거되었습니다. 'simple_tag'을 대신 사용하십시오 - 현명하게 모든 것이 동일하게 유지됩니다. –

+0

@AnujTBE 답변을 업데이트했습니다. – Satendra