没有值的Django templatetag和返回True或False的对象

时间:2015-09-08 11:41:41

标签: python django django-templates

我想创建一个模板标签来检查多个条件是否为真。

以下是我的尝试:

from django import template
register = template.Library()


@register.simple_tag
def is_special():
    if request.user.is_authenticated() and request.user.profile.status.slug == "special" and request.path in "/about/":
        return True
    else:
        return False

但是当我尝试在模板中加载并测试“is_special”时。我没有得到任何东西。

{% if is_special %}
    display something
{% else %}
    display default
{% endif %}

这是制作模板标签的正确方法吗?

1 个答案:

答案 0 :(得分:0)

当您使用{% if is_special %}时,它没有运行您的模板标记,它正在检查变量is_special是True还是False。

要将模板标记的结果分配给变量,您需要[赋值标记]。您还需要将request对象传递给您的代码。

@register.assignment_tag
def is_special(request):
    if request.user.is_authenticated() and request.user.profile.status.slug == "special" and request.path in "/about/":
        return True
    else:
        return False

然后在你的模板中:

{# run the tag #}
{% is_special request as is_special_result %}

{# use the result #}
{% if is_special_result %}
    display something
{% else %}
    display default
{% endif %}

最后,您需要确保request位于模板的上下文中。最简单的方法是确保您已启用request template context processor。然后,如果您使用基于通用类的视图或request快捷方式,render将可用。