Django模板:如何访问列表中第一项的属性


88

很简单 我有一个传递给Django模板的Python列表。

我可以使用以下方式专门访问此列表中的第一项

{{ thelist|first }}

但是,我也想访问该项目的属性...理想情况下,您会认为它看起来像这样:

{{ thelist|first.propertyName }}

但可惜,事实并非如此。

是否有任何模板解决方案,或者我只是发现自己传递了一个额外的模板变量...

Answers:


182

您可以通过其索引号访问列表中的任何项目。在模板中,其工作原理与任何其他属性查询相同:

{{ thelist.0.propertyName }}

嗯 但是,这不适用于inline_admin_formset。我猜迭代器不能按我期望的那样工作。
谢恩2015年

嗨,丹尼尔,您能检查一下我有关模板/视图stackoverflow.com/questions/34791375/…的问题吗?
Sathish

这比for遍历每个错误消息的循环要好得多。谢谢!
IIllIIll

1
还有thelist.-1.propertyName最后一项吗?
Asqiir

1
不,不幸的是,这是行不通的,Django无法对此进行解析。正如马克在另一个答案中建议的那样,您需要将with标记与一起使用|last
丹尼尔·罗斯曼

33

您可以将with模板标记与first模板过滤器结合使用以访问属性。

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}

1
对于字典,首先返回键/值对的元组,这有点丑陋,但是我添加了另一个with语句来获取值。{%withlist | first作为first_object%} {%with first_object.1作为object%} {{object}} {%endwith%} {%endwith%}
Matthew Purdon

21

如果您尝试访问多方字段,请记住添加all,这样看起来就像object.m2m_field.all.0.item_property


1
可以给您+10提及“全部”,您救了我的日子;)
窃窃私语

0

用于访问提供给django模板的对象列表中的ManyToManyField属性的可能更清晰的答案/语法如下所示:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.