Python - 在模板中找到第一个字典键

时间:2017-01-04 20:37:22

标签: python django dictionary

我正在尝试在for循环中的模板中显示我的字典键和值,但我不想显示第一个键。 最好的方法是什么? 我想过使用像

这样的东西
dictionary.keys()[0]

但我不能在模板中这样做。 或者可能为for循环添加计数器(不知道如何在循环中执行此操作) 这是我显示字典的循环 -

 {% 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 %}

3 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分:0)

您可以使用filter标记。例如:

<强> 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替换为您要删除的键名称。)< / p>

答案 2 :(得分: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 %}