无法在 Django 2.0 中使用自定义模板标签
could not use custom templatetags in Django 2.0
我正在使用 Django 2.0
。
我写了几个自定义模板标签在模板里面使用
notes/templatetags/note_tags.py
文件,其中 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
文件中,我将标签加载为
{% 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 }}
我也重启过很多次服务器
有什么问题吗?为什么模板中没有调用标签?
如果你想要模板中的对象,你需要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 }}
Note: You have defined filter
not tag and also you are using it incorrectly.
template filters are always used with pipe operator.
{{ somevalue|default_color_label }}
更新
assignment_tag
Deprecated since version 1.9 simple_tag
can now store results in a
template variable and should be used instead.
我正在使用 Django 2.0
。
我写了几个自定义模板标签在模板里面使用
notes/templatetags/note_tags.py
文件,其中 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
文件中,我将标签加载为
{% 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 }}
我也重启过很多次服务器
有什么问题吗?为什么模板中没有调用标签?
如果你想要模板中的对象,你需要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 }}
Note: You have defined
filter
not tag and also you are using it incorrectly. template filters are always used with pipe operator.{{ somevalue|default_color_label }}
更新
assignment_tag
Deprecated since version 1.9simple_tag
can now store results in a template variable and should be used instead.