Django模板列表的第一个元素

39 投票
3 回答
56280 浏览
提问于 2025-04-16 07:38

我把一个字典传给了我的Django模板,

字典和模板大致是这样的 -

lists[listid] = {'name': l.listname, 'docs': l.userdocs.order_by('-id')}

{% for k, v in lists.items %}
    <ul><li>Count: {{ v.docs.count }}, First: {{ v.docs|first }}</li></ul>
{% endfor %}

现在,docs 是一个 userdocs 类型的列表,也就是说它是一个实例。所以 first 过滤器会给我这个实例。接下来我需要从中提取它的 id。我该怎么做呢?

我试过 {{ v.docs|first }}.id 以及其他各种无效的尝试。

3 个回答

8

我不知道这是否有帮助……

你想要的是一个可迭代对象(v.docs)的第一个值,而你正在遍历另一个包含的可迭代对象(lists)。

对于计数,我会做同样的事情,但针对第一个元素……我会单独遍历 v.docs,并通过一个内部循环来获取第一个值。

{% for doc in v.docs %}
    {% if v.docs | first %}  
    <li>doc</li>
    {% endif %}
{% endfor %}

注意:第一个过滤器是应用在 v.docs 上,而不是 doc。没错,这涉及到另一个循环 :(

77

你可以试试这个:

{{ v.docs.0 }}

就像 arr.0 这样。

你可以通过索引来获取元素(比如 012 等等)。

63

你可以使用 {% with %} 这个模板标签来实现这种功能。

{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}

撰写回答