2017-01-04 21 views
0

forループのテンプレートに辞書のキーと値を表示しようとしていますが、最初のキーを表示したくありません。 これを行うにはどうすればよいですか? 私はPython - テンプレート内の最初の辞書キーを見つけよう

dictionary.keys()[0] 

のようなものを使用するのではと思ったが、私は、テンプレートでそれを行うことはできません。 または多分ループのためにカウンタを追加(以下ループでそれを行う方法がわからない) これは、あなたがfilterタグを使用することができますdictionary-

{% for year, durations in durationDict.items %} 
     <optgroup label={{ year }}> 
     {% for duration in durations %} 
      <option data-from-date="{{ duration.from_date }}" data-to-date="{{ duration.to_date }}" value={{ duration.duration_id }}>{{ duration.from_date }} 
           - {{ duration.to_date }}</option> 
     {% endfor %} 
{% endfor %} 
+6

あなたは '最初の辞書key'何を意味するのですか? Python辞書はハッシュテーブルであり、ソートされていないので、キーの順序はありません。 –

+0

私が追加する最初のキーが最新の年であり、optgroupラベルに表示したくない方法で辞書を作成します。他のすべての年(キー)を表示する必要があります。 – user2880391

+0

これまで、私はこのようなことをしてきました: 'durationDict.items.0' – bozdoz

答えて

0

をチェックして、それを省略することができます。

降順日付でソートしていますことを確認し、私の辞書のうち、OrderedDictを作成:だから今、私は最初のキーでも目であることを確認することができます

duration_dict = OrderedDict(sorted(duration_dict.items(), key=lambda t: t[0], reverse=True)) 

を最近の年。 と@bozdozにより示唆されるように、私は、forloop.first使用された最初の年なしにすべてのキーと値のペアを提示する:

{% for year, durations in duration_dict.items %} 
          {% if not forloop.first %} 
          <optgroup label={{ year }}> 
          {% endif %} 
          {% for duration in durations %} 
           <option data-from-date="{{ duration.from_date }}" data-to-date="{{ duration.to_date }}" value={{ duration.duration_id }}>{{ duration.from_date }} 
           - {{ duration.to_date }}</option> 
          {% endfor %} 
         {% endfor %} 
0

を示すために、私のループです。たとえば:

template_tags.py

from django import template 


register = template.Library() 

@register.filter() 
def exclude_first(dict): 
    first_key = list(dict)[0] 
    del dict[first_key] 
    return dict 

HTML

{% load template_tags %} 

{% for year, durations in durationDict|exclude_first %} 
... 
{% endfor %} 

は、これが最初の項目のための除くdurationDict内のすべてのアイテムをループにあなたを許可する必要があります。 dictsはデフォルトでは発注されません。毎回削除するカスタムキーと値のペアがある場合は、del dict[first_key]del dict['latest_year']に置き換えるか、削除するキーの名前にlatest_yearを置き換えます。

+2

dictは注文されていないので、この方法で削除されるキーは予測できません。 –

+1

私はちょうど彼が 'ordered_dict()'や何かそれらの行に沿って何かを使っていると仮定してこれを書きました – Hybrid

+0

私は 'latest_year'キー(または特定のキー/値)を削除する方法をOPに示すために私の答えを編集しました。それが最終的に彼の目標です。 – Hybrid

1

あなたはDjangoテンプレートでのforループの最初の反復を表示したくない場合は、私が最終的に行っては、以下の通りであったforloop.first

{% for year, durations in durationDict.items %} 
     {% if not forloop.first %} 
     <optgroup label={{ year }}> 
     {% for duration in durations %} 
      <option data-from-date="{{ duration.from_date }}" data-to-date="{{ duration.to_date }}" value={{ duration.duration_id }}>{{ duration.from_date }} 
           - {{ duration.to_date }}</option> 
     {% endfor %} 
     {% endif %} 
{% endfor %} 
関連する問題