models.py
class Order(models.Model):
price_a = models.PositiveIntegerField(blank=True, null=True)
price_b = models.PositiveIntegerField(blank=True, null=True)
price_c = models.PositiveIntegerField(blank=True, null=True)
views.py
def order_list():
order_list = Order.objects.all()
return render(request, 'orders/order_list.html', {'order_list': order_list})
模板:
{% for order in order_list %}
price_* 可能是 None
这里想输出 price_a + price_b + price_b 的总和
下面这个写法没有用:
{{ price_a|add:price_b|add:price_c }}
{% endfor %}
求解,或者有没有其他的实现方法?
巴扎黑2017-04-18 10:32:19
根據你所述的需求,有兩種解決方法:
1,在views.py裡面計算好之後再傳到模板裡面;
2,自訂模板filters來實現,具體實現方式如下:
第一步:在你專案的app目錄下新建templatetags資料夾(該資料夾和你的views.py和models.py同級),並在該資料夾下新建__init__.py和add_value.py文件,目錄結構如下:
|-- views.py
|-- models.py
|templatetags
|-- __init__.py
|-- add_value.py
第二步:編輯__init__.py和add_value.py檔。 __init__.py檔案為空即可,add_value.py檔案內容如下:
# coding:utf-8
__author__ = 'Dell'
from django import template
register = template.Library()
@register.filter(name='add_value')
def add_value(values):
count = 0
# 这里的values就是你使用该标签时传入的参数,在这个例子里面values就是render的时候传给模板的order_list的值
# 所以这里可以根据你实际传入的值做处理
for v in values:
if v['key']:
count += int(v['key'])
return count
第三步:在views.py裡面:
# 这里假设你order_list的值是[{'key': 1}, {'key': 2}, {'key': 3}]
render(request, 'orders/order_list.html', {'order_list': [{'key': 1}, {'key': 2}, {'key': 3}]})
第四步:在你的order_list.html模板裡面加入{% load add_value %}
,然后使用<p>{{ order_list|add_value }}</p>
最後應該可以實現你的需求了,希望可以幫到你哈。