在 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 模板中循环排序字典特定次数的主要内容,如果未能解决你的问题,请参考以下文章

Django学习-8-模板渲染的一些特性

将项目的密钥存储在并发字典中,该项目的密钥作为在C#中的字典中出现的次数

Django 计算特定用户在日期时间字段中某个日期的访问次数

thinkphp模板页面循环输出次数问题

直接插入排序的比较次数移动次数和赋值次数 最小/最大/平均值

django 模板中{%for%}的使用