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

如何在Django模板的Packages循环中对应输出另一列表元素

解决Django模板循环中对应输出另一个列表元素的问题

方案一:视图层合并数据(推荐)

直接在视图中将packages和对应价格列表打包成包含两者的结构,模板循环时可直接获取对应数据,代码更清晰易维护。

修改视图代码:

package_main_prices_list = []
for i in packages:
    package_price = float(i.startup_payment)
    calculated_price = round(max(package_price, package_price * last_price / 28000))
    package_main_prices_list.append(calculated_price)

# 合并packages和对应价格为字典列表
package_with_prices = [
    {'package': pkg, 'price': price} 
    for pkg, price in zip(packages, package_main_prices_list)
]

context = {
    'package_with_prices': package_with_prices,
}
return render(request, 'pages/shop.html', context)

模板中使用:

{% for item in package_with_prices %}
<p>{{ item.package.name }}<br>{{ item.price }}<br>{{ item.package.date }}</p>
{% endfor %}

方案二:自定义模板过滤器实现列表索引

如果不想修改视图结构,可通过自定义模板过滤器支持列表索引操作。

  1. 在你的Django应用下创建templatetags目录(无则新建),并新建custom_filters.py文件:
from django import template

register = template.Library()

@register.filter
def index(lst, idx):
    """根据索引获取列表元素"""
    try:
        return lst[int(idx)]
    except (IndexError, ValueError, TypeError):
        return ''
  1. 在模板中加载过滤器并使用:
{% load custom_filters %}

{% for package in packages %}
<p>{{ package.name }}<br>{{ package_main_prices_list|index:forloop.counter0 }}<br>{{ package.date }}</p>
{% endfor %}

注:forloop.counter0是Django模板内置变量,代表当前循环的索引(从0开始),正好对应价格列表的下标。

内容的提问来源于stack exchange,提问作者Md. Abdul Hamid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:19