我正在尝试在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 %}
答案 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 %}