Django 自定义模板标签抛出错误
Posted
技术标签:
【中文标题】Django 自定义模板标签抛出错误【英文标题】:Django custom template tag throwing an error 【发布时间】:2018-03-14 02:56:53 【问题描述】:我正在尝试使用自定义模板标签,当我尝试获取呈现的页面时它给了我这个错误:
Invalid block tag on line 29: 'get_message_print_tag', expected 'empty' or 'endfor'. Did you forget to register or load this tag?
我正在尝试根据message.tags
为我的 Flash 消息获取一个简单的标题,并在我的模板中将其设为粗体。我在哪里做错了?
apptags.py:
from django import template
register = template.Library()
def get_message_print_tag(value):
'''return a string for a message tag depending on the
message tag that can be displayed bold on the flash message'''
if 'danger' in value.lower():
return 'ERROR'
elif 'success' in value.lower():
return 'SUCCESS'
else:
return 'NOTE'
html:
% load apptags %
<div class="bootstrap-iso">
% if messages %
<div class="messages ">
% for message in messages %
<div % if message.tags % class="alert message.tags alert-dismissible" role="alert" % endif %>
% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %Error: % endif %
<strong> % get_message_print_tag message.tags % </strong>
message
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
</div>
% endfor %
</div>
% endif %
</div>
【问题讨论】:
【参考方案1】:您应该将装饰器@register.simple_tag
添加到函数中并以这种方式使用它:
% get_message_print_tag message.tags %
而不是
% get_message_print_tag message.tags %
【讨论】:
我已经尝试过了,但我仍然遇到同样的错误 即使我将 message.tags
替换为'success'
也会抛出相同的错误,这意味着您提到的不是问题
你指的也是个问题,解决了第一个问题后我意识到了!
是的,你是对的,@register.simple_tag
也不见了。将相应地更新答案。【参考方案2】:
来自 Django 文档:Simple Tags
为了简化带有多个参数(字符串或模板变量)的标签的创建,并在仅基于输入参数和一些外部信息进行一些处理后返回结果,Django 提供了一个辅助函数simple_tag
。这个函数是django.template.Library
的一个方法,它接受一个接受任意数量参数的函数,将它包装在一个渲染函数和上面提到的其他必要位中,并将它注册到模板系统中。
所以问题只有一行应该在标签的定义之上:
from django import template
register = template.Library()
@register.simple_tag
def get_message_print_tag(value):
'''return a string for a message tag depending on the
message tag that can be displayed bold on the flash message'''
if 'danger' in value.lower():
return 'ERROR'
elif 'success' in value.lower():
return 'SUCCESS'
else:
return 'NOTE'
【讨论】:
以上是关于Django 自定义模板标签抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
“模板语法错误:过滤器无效:”;基于 django 文档的自定义 django 模板过滤器损坏,但模板标签有效
我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误