在 django 模板中循环排序字典特定次数
Posted
技术标签:
【中文标题】在 django 模板中循环排序字典特定次数【英文标题】:Loop over a sorted dictionary a specific number of times in a django template 【发布时间】:2012-08-14 06:51:22 【问题描述】:我有一个包含排序选项的排序字典:
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 语句来防止显示最后一个选项,但这似乎很浪费。
我找到了this filter,但我不确定如何将它与需要键和图标数据的 forloop 结合起来。
如何编写一个在字典上运行并且只循环 X 次的循环的 django 模板?
【问题讨论】:
【参考方案1】:与乔的回答类似,但实际上有 a built-in filter slice
会为您执行此操作:
% for key, icon in sort_options.items|slice:":3" %
【讨论】:
很好,似乎比创建自定义标签更简单。感谢分享。【参考方案2】:我认为您可以使用模板过滤器来做到这一点。例如,在:
./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 %
我没有机会测试上面的代码,但认为逻辑是合理的。让我知道你的想法。
【讨论】:
以上是关于在 django 模板中循环排序字典特定次数的主要内容,如果未能解决你的问题,请参考以下文章
将项目的密钥存储在并发字典中,该项目的密钥作为在C#中的字典中出现的次数
Django 计算特定用户在日期时间字段中某个日期的访问次数