2016-08-31 5 views
-6

カテゴリフィールドに3つのカテゴリがあります。私はdjangoのテンプレートでそれをチェックし、3つの異なるカテゴリのappropirteのURLを割り当てたいです。djangoテンプレートで同時にif、elif、else条件をチェックする方法

私が試した:

{% for entry in entries %} 
     {% if entry.category == 1 %} 
     <a href="{% url 'member:person-list' %}"><li>{{ entry.category }}</li></a> 
     {% elif entry.category == 2 %}   
     <a href="{% url 'member:execomember-list' %}"><li>{{ entry.category}}</li></a> 
     {% else %} 
     <a href="{% url 'member:lifemember-list' %}"><li>{{ entry.category}}</li></a> 
     {% endif %} 
{% empty %} 
    <li>No recent entries</li> 
{% endfor %} 

をしかし、私はPythonの場合のみで、最初に一致した状態を確認してください知っています。したがって、1つの望ましい結果しか得られなかった。正しいリンクで3つのエントリをすべて取得するにはどうすればよいですか?

編集:パイソンものの

条件ならば、それはENDFORループまで、それぞれの状態を確認するときに使用するのelif内のループのためにのみ、最初のマッチングを確認してください。したがって、下の私の答えは正常に働いた。出力の

{% for entry in entries %} 
     {% if entry.category == 'General Member' %} 
     <a href="{% url 'member:person-list' %}"><li>{{ entry.category }}</li></a> 
    {% elif entry.category == 'Executive Committee Member' %} 
     <a href="{% url 'member:execomember-list' %}"><li>{{ entry.category}}</li></a> 
    {% else %} 
    <a href="{% url 'member:person-list' %}"><li>{{ entry.category}}</li></a> 
     {% endif %} 
    {% empty %} 
     <li>No recent entries</li> 
    {% endfor %} 

ウェブページビュー:

+1

何がこのようなテンプレートにロジックを最小限にするために、あなたのEntryモデルにリファクタリング持つことができますか?これは全く明確ではありません。それぞれの 'entry.category'は一度に一つの条件にしかマッチできません。あなたは何を達成したいですか? –

+1

非常に不明です、申し訳ありません。 'しかし、私はPythonが最初に' 'if''と一致する条件をチェックすることを知っています。何を期待していますか? – Saksow

+1

私は3つのカテゴリすべての出力を期待しています。 3つのカテゴリは区別され、それぞれに別々のリストがあるためです。だから私は正しいリストを得るためにそれらのリンクですべての3つのカテゴリの名前を取得したい。そしてこのリストは彼らのURLから得られるでしょう。私はそれがあなたをクリアすることを願っています – ohid

答えて

0

これは私の作業の答えであることがより明確化するために

enter image description here

、私は、Djangoのシェルで私のコードを確認してください。私のシェルのスニペットを参照してください。

enter image description here

はさえ、私は条件の場合の順序を変更し、結果は同じまま。出力で私のシェルコードを参照してください:

enter image description here

あなたは私のコードで間違ったを参照していますか? Pythonの条件に完全に準拠し、期待される結果が得られます。誰でも自分のdjangoシェルでそれを確認することができます。

+0

まだ何をしようとしているのか分かりません。 – Saksow

+2

これは実際にはPythonの「最初の一致条件のチェックのみ」とは何の関係もありませんでしたが、文字列と整数を比較していたという事実はありません。 –

+1

私の出力と説明の写真を私の回答に掲載しました。それが何であれ、それは私に3つのカテゴリーすべてに対して正しい出力を与えます。 – ohid

1

3つのカテゴリに属する​​カテゴリに応じて、各エントリをURLに関連付けることができます。テンプレートで次に

class Entry(models.Model): 
    category = ... 

    def get_entry_url(self): 
     if self.category == 'General Member': 
      return reverse for the url 'member:person-list' 

     elif self.category == 'Executive Committee Member': 
      return reverse for the url 'member:execomember-list' 

     else: 
      return reverse for the url 'member:person-list' 

{% for entry in entries %} 
    <a href="{{ entry.get_entry_url }}"><li>{{ entry.category }}</li></a> 
{% empty %} 
    <li>No recent entries</li> 
{% endfor %} 
+0

これは別のアプローチかもしれません。それは私の答えより良いパフォーマンスを与えるのですか?ロジックを使用するには2つの場所が必要です。モデルとテンプレートの両方が必要ですが、テンプレートは1つしかありません。テンプレートは少ないと思います。 – ohid

+0

あなたのビューの1つで、ロジックを実行し、リダイレクトするエントリのURLが必要な場合、コードベース全体に別の 'if ... else'ステートメントを書くのではなく、' entry.get_entry_url() 'を実行しますあなたがエントリのURLを取得したいときはいつでも。したがって、これは単なる別の方法ではなく、リファクタリングとテンプレートの多くのロジックを減らすことです。これは良い方法です。 – Alexxio

+0

実際、私はそれをインクルージョンタグ – ohid

関連する問題