【问题标题】:Django: How to create temporary list in django template with out using template tags?Django:如何在不使用模板标签的情况下在 django 模板中创建临时列表?
【发布时间】:2015-05-09 07:08:49
【问题描述】:

如何在不使用模板标签的情况下在 django 模板中创建临时列表?

如果无法在 django 模板中创建临时列表,那么如何使用模板标签来修复以下场景?

简单的故事:我有一个名为 Info 的列表,它包含一堆重复的值,例如 ("hi","hello","hi","hello", “嘿”、“嘿”)。我想使用相同的列表 Info

在同一页面中显示一个 div 中的唯一值和另一个 div 中的所有值

请注意:我在这里解释了简单的场景。所以你可能认为在 python 中使用 set 方法来防止重复值。在我的情况下不可能,我必须将一个对象发送到 django 模板

一个页面有两个div,应该显示来自同一个对象的不同信息。

第 1 部分:

{% for v in Info %}
       {{v}} // Show unique values ("hi","hello","hej","hey")            
{% endfor %}

第 2 部分:

{% for v in Info %}
           {{v}} // Show all the values  ("hi","hello","hi","hello","hej","hey")             
 {% endfor %}

请告诉我你的看法

【问题讨论】:

  • 你不能发送两个对象作为模板的上下文吗? {'Info':信息,'unique_info':设置(信息)}
  • @srj:您好,官方回答是否定的,因为我给出了简单的例子。事实是,对象包含列表。列表长度超过 5000 且超过对象包含列表内的字典内的字典内的列表等等
  • 如果是这种情况,那么自定义过滤器可能是您最好的选择。如果与您的复杂对象匹配,请查看regroup 标签。

标签: python django


【解决方案1】:

使用自定义过滤器:

@register.filter(name='unique')
def unique(value, arg):
    # put your complex unique logic here
    return set(value)

参考https://docs.djangoproject.com/en/1.8/howto/custom-template-tags/#writing-custom-template-filters

将其用作{% for v in Info|unique %} {{v}} {%endfor%} 请注意,调用 set 会打乱您的列表顺序

【讨论】:

  • 您好,我未能表达这个空间的问题。我再次感到抱歉。我将结束这个问题并提出具有确切问题的新问题。对于你的工作,我投票赞成你的答案。
  • 我在这里发布了新问题stackoverflow.com/questions/30148744/… 请看看,让我知道你的看法
猜你喜欢
  • 2014-03-20
  • 2022-11-25
  • 2011-09-17
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2010-09-20
  • 2011-06-15
相关资源
最近更新 更多