关于python:如何在django template if语句中使用自定义django templatetag?

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