1

我有一个包含排序选项的排序字典:

sort_options = SortedDict([
    ("importance" , ("Importance" , "warning-sign")),
    ("effort" , ("Effort" , "wrench" , "effort")),
    ("time_estimate" , ("Time Estimate" , "time")),
    ("date_last_completed" , ("Date Last Completed" , "calendar")),
])  

我在我的模板中显示这些选项:

{% for key, icon in sort_options.items %}<!-- Sort Options -->
    <a class="btn btn-info" href={{ request.path }}?key={{ key }}&orientation=desc><i class="icon-{{ icon.1 }} icon-large"></i></a>
{% endfor %}

我需要定义 4 个排序选项,但我只想显示前 3 个(其余选项在其他地方使用)。我还预计会添加其他不需要显示的排序选项。我可以编写一个带有 forloop 计数器的 if 语句来防止显示最后一个选项,但这似乎很浪费。

我找到了这个过滤器,但我不确定如何将它与需要键和图标数据的 forloop 结合起来。

如何为在字典上运行且仅循环 X 次的循环编写 django 模板?

4

2 回答 2

4

与乔的回答类似,但实际上有一个内置过滤器slice可以为您执行此操作:

{% for key, icon in sort_options.items|slice:":3" %}
于 2012-08-17T20:37:43.183 回答
0

我认为您可以使用模板过滤器来做到这一点。例如,在:

./mymodules/templatetags/mytags.py

@register.filter
def get_recent(object, token):
    """
    Must pass a Option Dictionary 
    """
    return object.items()[:token]

然后在您的模板中:

{% load mytags %}

{% for option in sort_options|get_recent:3 %}
    key: {{ option.0  }} 
    value: {{ option.1 }}
{% endfor %}

我没有机会测试上面的代码,但认为逻辑是合理的。让我知道你的想法。

于 2012-08-17T20:08:39.363 回答