how to use custom django templatetag with django template if statement?
我制作了一个django模板标签,该标签计算了我的自定义用户之一的多对多字段长度:
1 2 3 4 5 6 7 8 | from django import template register = template.Library() @register.simple_tag(takes_context=True) def unread_messages_count(context): user = context['request'].user return len(user.messages_unread.all()) |
并且在模板本身中,我只想将其显示为大于零的值才显示给用户,所以我尝试了:
1 2 3 | {% ifnotequal unread_messages_count 0 %} some code... {% endifnotequal %} |
但显然它没有用。 甚至没有" with"语句:
1 2 3 4 5 | {% with unread_messages_count as unread_count %} {% ifnotequal unread_count 0 %} some code... {% endifnotequal %} {% endwith %} |
如何检查变量是否大于0,并且只有在变量大于0的情况下,才向用户提供一些代码(包括变量本身中的数字)。
谢谢。
最简单的方法是使用分配标签。
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#assignment-tags
1 2 3 4 5 6 7 8 9 | @register.assignment_tag(takes_context=True) def unread_messages_count(context): user = context['request'].user return len(user.messages_unread.all()) {% unread_messages_count as cnt %} {% if cnt %} foo {% endif %} |
您可以使用Django自定义过滤器https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
1 2 3 | def unread_messages_count(user_id): # x = unread_count ## you have the user_id return x |
并在模板中
1 2 3 | {% if request.user.id|unread_messages_count > 0 %} some code... {% endif %} |