在JavaScript中遍历Django列表

1 投票
1 回答
2607 浏览
提问于 2025-04-17 05:12

我需要遍历我在模板中传递的django列表。

在我的django视图中有这段代码:

if plan:
    investments = Investment.objects.all().filter(plan = plan).order_by('maturity_date').filter(maturity_date__gte = now)
    for i in investments:
        financial_institution = i.financial_institution
        amount = i.get_current_value(date)
        fi_list.append({
            'fi': financial_institution,
            'amt':amount
        })
    context['list'] = fi_list

这段代码输出了:

[<financial_institution: Example> <amount: 5000>]

现在我想做的是遍历这个列表,如果我的javascript变量和列表中的某个项目匹配,就执行后面的代码。但是我不知道该怎么做。

这是我目前的javascript代码,使用了jQuery:

function cdic_limit(amount) {
        var limit = 100000.00;
        var list ="{{ list }}";
        var fi = $("#id_financial_institution option:selected").text();

    }

接下来,我最终想要的是,如果选定的机构在列表中,检查并确保他们的总金额不超过10万美元。

有什么建议吗?

1 个回答

1

我不太清楚你打算怎么使用你添加到上下文中的 fi_list 变量。如果你打算以一种系统化的方式列出所有机构及其限制,比如用表格,那你应该可以很简单地获取 amount 数据,就像你获取所选金融机构的名称那样。

如果你打算向用户展示所有机构的金额(我觉得你可能并不想这样),这里的“展示”是指这些信息在HTML代码中存在,不管浏览器是否显示它,那么你可以将 fi_list 编码成一个JSON字符串,然后在响应中包含类似于以下的代码(放在一个脚本标签里):

var finInst = jQuery.parseJSON( "{{ jsonString }}" );

function checkLimit(amount) {
    // I don't know what amount is supposed to do.
    if (finInst[jQuery(this).text()] > 100000)
        // do amount > 100000 code
    else
        // amount within limit
}

用django/python代码可以像这样:

import json
if plan:
    investments = Investment.objects.all().filter(plan = plan).order_by('maturity_date').filter(maturity_date__gte = now)
    fi_list = {}
    for i in investments:
        financial_institution = i.financial_institution
        amount = i.get_current_value(date)
        fi_list[financial_institution] = amount
    context['jsonString'] = json.dumps(fi_list)

最后,每当用户在网页上选择一个机构选项时,就触发 checkLimit 函数。

老实说,这段代码真的不太好,因为我觉得你并不想暴露每个机构的所有金额值(这些可能是非常机密的信息)。所以,生成实时结果的唯一可靠方法是使用AJAX,在选择机构时调用django的视图。你可能想看看 dajaxproject,这样可以简化这些请求。

撰写回答