为什么此dict在python代码中不可迭代,而在django模板中可迭代?

时间:2018-12-04 16:52:41

标签: python django django-views

首先,我必须承认我不是python还是django模板(jinja)语言方面的专家,所以如果我错过了某些事情,对此我感到抱歉。

我写了一个简单的python字典来保存其他具有以下代码的数据:

    all_dividend_tx_additional_info[company] = 
        {'date': dividend.time_of_payment,
         'shares': dividend.shares_owned,
         'amount': dividend.amount,
         'currency': dividend.currency,
         'total_amount': total_amount,
         'tax': tax,
         'payout': payout
}

字典索引中的公司将由for循环中的真实公司名称填写,但基本上是这样:

{u'BAKKA': {u'amount': Decimal('15.00'),
            u'currency': u'NOK',
            u'date': datetime.datetime(2018, 12, 4, 16, 0, 22, tzinfo=<UTC>),
            u'payout': 180.0,
            u'shares': 12,
            u'tax': 55.080000000000005,
            u'total_amount': Decimal('180.00')}}

但是,当我尝试像这样迭代时:

for key, value in all_dividend_tx_additional_info.iteritems:
  print key, value

我收到以下错误:     'builtin_function_or_method'对象不可迭代

但是,当我尝试使用此字典并将其发送到模板时,它可以很好地使用以下语法:

{% for key, value in all_dividend_tx_additional_info.items %}
  {{ key }} - {{ value }}

有人可以解释为什么它在Django模板中与python代码相比可迭代吗?显然这里有些差异我可能已经错过了,但是我似乎无法弄清楚为什么。

2 个答案:

答案 0 :(得分:0)

iteritems是字典的方法(函数)。它没有参数,但是要应用它来获取(键,值)对,您必须添加括号

for key, value in all_dividend_tx_additional_info.iteritems():

答案 1 :(得分:0)

您应该在Python 3.x上尝试使用

for key, value in all_dividend_tx_additional_info.items():
    print(key, value)

对于Python 2.x,请尝试iteritems()

for key, value in all_dividend_tx_additional_info.iteritems():
        print(key, value)