在将数据传递给Django中的模板之前装饰数据

时间:2014-04-29 09:54:43

标签: python django

将数据从视图传递到模板时,我存在这种混淆。数据以0.12的形式存储在浮点数中,它显示为这样的" 12%",所以我们必须改变它,就像我们在下面所做的那样,但问题是,我们应该选择什么样的选择选择? 有两种选择,第一种是这样的:

item_list = Items.objects.all()
for item in item_list:
    item.interest_rate *= 100
    item.financing_amount /= 10000
...
return render_to_response("xxxx.html",{'ret': item_list})

第二个是这样的:

item_list = Items.objects.all()
ret = []
for item in item_list:
    temp = {
        "temp_interest_rate": item.interest_rate *= 100,
        "temp_interest_rate": item.financing_amount /= 10000,
    }
    ret.append(item)
...
return render_to_response("xxxx.html",{'ret': ret})

第一个显然要简单得多,但我想也许它不是直接更改数据库模型的好方法,即使我们没有保存它。

我已经说服我的同学使用第二个安全,但我并没有说服自己。那么有经验的Django开发者可以提供一些建议吗?

1 个答案:

答案 0 :(得分:1)

首先,"0.12"字符串,它不是浮点数。

在将对象传递给模板之前,在视图中装饰对象是完全可以的。动态向对象添加属性不会影响数据库。

此处的问题是您正在视图中修改显示详细信息。这不太理想。您应该让表示层(模板)决定某些内容的显示方式,以及您希望通过" raw"数据

解决此问题的最简单方法是创建自己的template filter,它会在表示层正确格式化数据。您会注意到large library of default filters都具有相同的用途 - 将数据转换为表示层的格式;这就是为什么推荐的方法是创建自己的过滤器。