You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:28:28