0

模板代码片段:

{% for stock in portfolio %}
   <tr>
      <td>{{ stock.stock_name }}</td>
      <td>{{ stock.trans_price }}</td>
      <td>{{ stock.trans_quantity }}</td>
      <td>{{ stock.trans_date }}</td>
      <td>{{ stock_ltps.stock.stock_name }}</td> <!-- This value doesn't get fetched. -->
   </tr>
{% endfor %}

查看代码片段:

portfolio = Portfolio.objects.all()

# another dictionary to hold live stock prices from api 
stock_ltps = {}
for stock in portfolio:
    stock_ltps[stock.stock_name] = 12 #static number for debugging/trial

return render(request, 'portfolio_management/index.html', context={"stc": stock_name, "stock_add_form": stock_add_form, "portfolio": portfolio,
                           "stock_ltps": stock_ltps})

这不会从另一个字典中获取值。如何解决这个问题?

4

2 回答 2

1

这是一个常见的问题。绕过它的一种方法是使用模板标签。首先,创建一个模板标签文件(如果尚不存在)。我将其命名为 tag_test.py:

from django.template.defaultfilters import register

@register.filter(name='dict_key')
def dict_key(d, k):
    '''Returns the given key (k) from a dictionary (d).'''
    return d[k].stock.stock_name

然后,在您的模板中:

{% load tag_test %} 
{% for stock in portfolio %}
   <tr>
      <td>{{ stock.stock_name }}</td>
      <td>{{ stock.trans_price }}</td>
      <td>{{ stock.trans_quantity }}</td>
      <td>{{ stock.trans_date }}</td>
      <td>{{ stock_ltps | dict_key:forloop.counter0}}</td>
   </tr>
{% endfor %}

在上面的脚本中,循环的索引“forloop.counter0”作为参数传递给函数“dict_key”,然后返回第 i 个索引的“stock.stock_name”组件。

(请注意我没有测试上面的代码——如果你能提供一个完全可行的例子和测试数据,我可以在这里给出一个已知有效的答案)。

于 2019-12-28T11:10:58.257 回答
0
{% for stock in portfolio %}
   <tr>
      <td>{{ stock.stock_name }}</td>
      <td>{{ stock.trans_price }}</td>
      <td>{{ stock.trans_quantity }}</td>
      <td>{{ stock.trans_date }}</td>
   </tr>
{% endfor %}

{{ stock_ltps }}

您必须分别调用这两个项目

于 2019-12-28T11:00:30.720 回答