2017-08-17 8 views
0

私はDjangoで新しく、テンプレートで何かを検索しようとしています。もし何かを印刷したいと思えば、私は別のものを印刷したいと思います。このような かなっ:djangoテンプレートでフラグ変数を定義する

{% for art in artifacts %} 
{% if art.product_component == 'A' %} 
<p> something.</p> 
{{ found = True }} 
{% endif %} 
{% endfor %} 

{% if not found %} 
<p>NA</p> 
{% endif %} 

私は、これはそれを行うには正しい方法ではありません知っているが、これは単にアイデアを理解することです。

どうすればいいですか?

+0

私は簡単な方法は、ビューのコンテキストで 'found'を定義だと思います。カスタムフィルタを作成することもできます。 –

+0

新しい変数を作成して、Djangoテンプレートの変数に値を代入することはできません(1回限りの代入であり、ここでは役に立ちません)。あなたはjinja2テンプレート言語btwですることができます。だから、変数に値を代入するための独自のテンプレートタグを定義するか、あるいは 'found'が真であるかどうかをビューで把握してレンダリングコンテキストに渡す必要があります。 – dirkgroten

+0

あなたはもっとそれを説明できますか? 私はコンセプトを理解していると思いますが、どうすればいいのかわかりません:( – ROM

答えて

2

product_component == 'A'が存在するかどうかを調べるためのテンプレートタグを書き込むことができます。

your_app_dir/templatetags/product_tag.py

from django import template 
from django.template import Library 

register = Library() 

@register.assignment_tag() 
def check_product_component_status(artifacts): 
    value = [art for art in artifacts if art.product_component == 'A'] 
    if value: 
     return True 
    return False 

テンプレート:

{% for art in artifacts %} 
    {% if art.product_component == 'A' %} 
     <p> something.</p> 
    {% endif %} 
{% endfor %} 

{% load product_tag %} 
{% check_product_component_status artifacts as status %} 
{% if not status %} 
    <p> something.</p> 
{% endif %} 
+0

私はこのエラーを受けました:TemplateSyntaxError: 'WSRR_Tag'は登録済みのタグライブラリではありません – ROM

+0

tempateとテンプレートタグコードを共有してくださいあなたがテンプレートのタグ名は何ですか?{%load WSRR_Tag%}のようにテンプレートにモジュール名をロードする必要があります。ここではモジュール名はWSRR_Tagです。 –

関連する問題