Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在模板中打印计算数据_Django_Django Templates_Django Views - Fatal编程技术网

Django 在模板中打印计算数据

Django 在模板中打印计算数据,django,django-templates,django-views,Django,Django Templates,Django Views,我很难找到将计算数据打印到模板的方法。我会尽力描述我的情况。我有一个名为“股息”的模型: class Dividend(models.Model): date = models.DateField('pay date') amount = models.FloatField( validators=[MinValueValidator(0.001), MaxValueValidator(1000000000000000.0)]) price = models.FloatF

我很难找到将计算数据打印到模板的方法。我会尽力描述我的情况。我有一个名为“股息”的模型:

class Dividend(models.Model):
    date = models.DateField('pay date')
    amount = models.FloatField( validators=[MinValueValidator(0.001), MaxValueValidator(1000000000000000.0)])
    price = models.FloatField('price per share',
                              validators=[MinValueValidator(0.001), MaxValueValidator(1000000000000000.0)])
股息数据表如下所示:

Date    Dividend    Price
Sept. 26, 2013  $0.8    $24.75
June 26, 2013   $0.7    $24.74
March 26, 2013  $0.6    $23.59
Dec. 13, 2012   $0.4    $19.18
Sept. 26, 2012  $0.1    $20.66
我想加上每一笔股息筹集的百分比(如果是的话)。比如说:

Date    Dividend    Price
Sept. 26, 2013  $0.8 (+12,5%)   $24.75
June 26, 2013   $0.7 (+14,28%)  $24.74
March 26, 2013  $0.6 (+50%)     $23.59
Dec. 13, 2012   $0.4 (+300%)    $19.18
Sept. 26, 2012  $0.1            $20.66
我该怎么做?我在列表中有数据,因为我正在添加一些我不想被插入db的红利。所以我有一个分红对象列表。 基本上,我想计算视图中的百分比变化,并将其作为另一个参数添加到每个股息中

for dividend in dividend_list:
    dividend.change = ...calculation...
而不是简单地将其添加到我的模板中

{% for dividend in stock.dividend_set.all|order_by:"date" %}
    <tr>
       <td>{{ dividend.date }}</td>
        <td>${{ dividend.amount }} ({{ dividend.change }}%)</td>
        <td>${{ dividend.price }}</td>
    </tr>
{% endfor %}
{股票股息的百分比。股息设置。所有|订单|由:“日期”%}
{{divident.date}
${{divident.amount}}({{divident.change}}}%)
${{distribution.price}}
{%endfor%}

但我不能这样做,因为股息中没有模型字段的变化。我存储在新的QueryDict中,其中的键是distribution.id和value percentage change。但我无法在模板中查询dict[divident.id]。那么最好的方法是什么呢?我很抱歉问了这么一个琐碎的问题,但我不知道该找什么。也很抱歉标题不能令人满意,如果我在您的回答后提出了更具描述性的内容,我会更改标题。

您可以向视图中的实例添加任意数据,而无需将它们作为模型字段。这很好:

for dividend in dividend_list:
    dividend.change = ...calculation...
只需确保将
红利列表
传递到模板上下文即可。您使用的是基于类的视图还是函数视图?对于基于类的视图,请在
get\u context\u data
中执行此操作,并将其添加到返回值中。对于函数视图,将修改后的
股息
列表(不再是惰性计算的查询集)放入dictionary参数:

    return render(template_name, {'dividend_list': dividend_list})
然后在模板中对其进行迭代

{% for dividend in dividend_list %}
    <tr>
        <td>{{ dividend.date }}</td>
        <td>${{ dividend.amount }} ({{ dividend.change }}%)</td>
        <td>${{ dividend.price }}</td>
    </tr>
{% endfor %}
{股息列表%中的股息百分比}
{{divident.date}
${{divident.amount}}({{divident.change}}}%)
${{distribution.price}}
{%endfor%}
您还可以在股息模型上编写一个方法来进行计算,然后在模板循环中调用它,甚至可以编写一个自定义模板标记来显示股息

for dividend in dividend_list:
    dividend.change = ...calculation...

另外,您确实不想使用
FloatField
来表示金钱。改用
DecimalField

谢谢!很抱歉,我在模板中使用了数据库数据。这么愚蠢的错误。同样感谢德米尔菲尔德的建议,我意识到太晚了,现在我懒得重写它。但既然你也指出了这一点,我会的。