检查对象是否在模板中的manytomany列表中

时间:2013-07-12 08:57:49

标签: django django-templates

如何检查某个对象/ ID是否在列表中?

如果连接对象的ID不是“6”,我想要显示一些东西。

尝试过这样的事情:

 {% if user.benefits.all != "6" %}
    You do not have a benefit with ID 6.
 {% endif %}

2 个答案:

答案 0 :(得分:3)

最好将大量逻辑放入模板中。查看(或模型) - 是一个更好的地方。

例如,在视图中您可以检查,user.benefits具有此代码的id = 6的元素:

has_benefit = user.benefits.filter(id=6).count() > 0
context['has_benefit'] = has_benefit

现在在模板中使用这个新的上下文变量:

{% if not has_benefit %}
    You do not have a benefit with ID 6.
{% endif %}

<强>已更新

如果您仍想在模板中执行此操作,最好创建custom template filter

from django import template
register = template.Library()

@register.filter(name='has_benefit')
def has_benefit(user, benefit_id):
    b_id = int(benefit_id)
    return user.benefits.filter(id=b_id).count() > 0

现在在模板中使用{% load module_name %}加载templatetags模块并使用:

{% if not user|has_benefit:"6" %}
    You do not have a benefit with ID 6.
{% endif %}

答案 1 :(得分:0)

{% for benefit in user.benefits.all %}
    {% if benefit.id != 6 %}
        You do not have a benefit with id 6
    {% endif %}
{% endfor %}

但这将循环所有好处,并在每次条件通过时打印出来。

因此,您应该编写一个模板标记,该标记会返回特定用户的所有权益的ID列表,一旦您拥有该列表,您就可以执行此操作:

{% if 6 not in list_of_benefit_ids %}
    You do not have a benefit with id 6
{% endif %}