Django遍历混合数组问题:如何访问对象属性与字符串
解决Django模板中访问数组内对象属性的问题
这个问题很好解决,核心是你需要先把数组里的各个元素拆出来——因为你传入的entries里的每一项都是一个包含对象和四个字符串的列表,而不是单个对象。
问题根源
你当前的代码:
{% for obj in entries %} {{obj}} <br> {% endfor %}
这里的obj其实是整个列表[obj1, 'date1', 'time1', 'title1', 'description1'],所以直接输出{{obj}}会调用列表的字符串表示,其中对象部分会使用它的__str__方法返回值,但没法直接访问对象的其他属性。
解决方案:通过索引拆分列表元素
Django模板中访问列表的索引需要用.数字的形式(比如.0对应列表第一个元素,.1对应第二个,以此类推)。你可以直接在模板中通过索引访问列表里的对象和字符串:
{% for entry in entries %} <!-- 访问对象的属性 --> 姓名:{{ entry.0.name }} {{ entry.0.surname }} <br> <!-- 访问字符串元素 --> 日期:{{ entry.1 }} <br> 时间:{{ entry.2 }} <br> 标题:{{ entry.3 }} <br> 描述:{{ entry.4 }} <br> <hr> {% endfor %}
优化:用with标签提升代码可读性
如果觉得直接写索引不够直观,可以用{% with %}标签给每个元素起别名,让模板代码更清晰:
{% for entry in entries %} {% with person=entry.0 date=entry.1 time=entry.2 title=entry.3 desc=entry.4 %} <div class="entry-card"> <h2>{{ title }}</h2> <p>联系人:{{ person.name }} {{ person.surname }}</p> <p>时间:{{ date }} {{ time }}</p> <p>{{ desc }}</p> </div> {% endwith %} {% endfor %}
注意事项
- 确保你传入的对象(
entry.0)确实存在name和surname属性——如果是Django模型实例,要确保模型里定义了这些字段;如果是自定义类对象,要确保类中声明了这些属性。 - Django模板中不能用
[]访问列表索引(比如entry[0]),必须用.数字的语法,这是模板语言的规则。
内容的提问来源于stack exchange,提问作者ItsMeTheBee
相关产品推荐
相关产品推荐

