2

特定のオブジェクト/ID がリストに含まれているかどうかを確認するにはどうすればよいですか?

接続オブジェクトのIDが「6」以外の場合に何か表示させたい。

このようなもので試してみました:

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

2 に答える 2

4

テンプレートには多くのロジックを入れない方がよいでしょう。ビュー(またはモデル) - そのためのより良い場所です。

たとえば、次のコードで 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 %}

更新:

それでもテンプレートで実行したい場合は、カスタム テンプレート フィルターを作成することをお勧めします。

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 %}
于 2013-07-12T09:12:27.460 に答える
1
{% 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 %}
于 2013-07-12T09:08:50.680 に答える