特定のオブジェクト/ID がリストに含まれているかどうかを確認するにはどうすればよいですか?
接続オブジェクトのIDが「6」以外の場合に何か表示させたい。
このようなもので試してみました:
{% if user.benefits.all != "6" %}
You do not have a benefit with ID 6.
{% endif %}
特定のオブジェクト/ID がリストに含まれているかどうかを確認するにはどうすればよいですか?
接続オブジェクトのIDが「6」以外の場合に何か表示させたい。
このようなもので試してみました:
{% if user.benefits.all != "6" %}
You do not have a benefit with ID 6.
{% endif %}
テンプレートには多くのロジックを入れない方がよいでしょう。ビュー(またはモデル) - そのためのより良い場所です。
たとえば、次のコードで 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 %}
{% 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 %}