我想创建一个模板标签来检查多个条件是否为真。
以下是我的尝试:
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 %}
这是制作模板标签的正确方法吗?
答案 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
将可用。