Django自定义模板标记抛出错误

时间:2017-10-03 00:43:14

标签: django django-templates django-template-filters templatetags

我正在尝试使用自定义模板标记,当我尝试获取呈现的页面时,它会给我这个错误:

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}}获取基于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' 的Flash消息的简单标题,并在我的模板中将其设为粗体。我在哪里弄错了?

apptags.py:

{% 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>

HTML:

{{1}}

2 个答案:

答案 0 :(得分:1)

您应该将装饰器@register.simple_tag添加到该函数并以这种方式使用它:

{% get_message_print_tag message.tags %}

而不是

{% get_message_print_tag {{message.tags}} %}

答案 1 :(得分:1)

来自Django文档:Simple Tags

为了简化带有多个参数的标记的创建 - 字符串或模板变量 - 并在仅根据输入参数和一些外部信息进行一些处理后返回结果,Django提供了一个辅助函数{{1} }。这个函数是simple_tag的一个方法,它接受一个接受任意数量参数的函数,将它包装在一个渲染函数和上面提到的其他必要位中,并将它注册到模板系统。

所以问题只有一行应该高于标签的定义:

django.template.Library