python - django 模板里如何多個(gè)值相加?
問題描述
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 的總和 下面這個(gè)寫法沒有用: {{ price_a|add:price_b|add:price_c }}{% endfor %}
求解,或者有沒有其他的實(shí)現(xiàn)方法?
問題解答
回答1:根據(jù)你所述的需求,有兩種解決辦法:1,在views.py里面計(jì)算好之后再傳到模板里面;2,自定義模板filters來實(shí)現(xiàn),具體實(shí)現(xiàn)方式如下:
第一步:在你項(xiàng)目的app目錄下新建templatetags文件夾(該文件夾和你的views.py和models.py同級(jí)),并在該文件夾下新建__init__.py和add_value.py文件,目錄結(jié)構(gòu)如下:
|-- views.py|-- models.py|templatetags |-- __init__.py |-- add_value.py
第二步:編輯__init__.py和add_value.py文件。__init__.py文件為空即可,add_value.py文件內(nèi)容如下:
# coding:utf-8__author__ = ’Dell’from django import templateregister = template.Library()@register.filter(name=’add_value’)def add_value(values): count = 0 # 這里的values就是你使用該標(biāo)簽時(shí)傳入的參數(shù),在這個(gè)例子里面values就是render的時(shí)候傳給模板的order_list的值 # 所以這里可以根據(jù)你實(shí)際傳入的值做處理 for v in values:if v[’key’]: count += int(v[’key’]) return count
第三步:在views.py里面:
# 這里假設(shè)你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>
最后應(yīng)該就可以實(shí)現(xiàn)你的需求了,希望可以幫到你哈。
回答2:你不可以直接在view里面處理好再在模板里面引用嗎?
相關(guān)文章:
1. python - [已解決]flask QQ郵箱mail2. html - eclipse 標(biāo)簽錯(cuò)誤3. 主題切換問題,用過別人的webapp在后臺(tái)切換模板主題后手機(jī)端打開網(wǎng)頁就是切換到的主題了4. javascript - 小程序中遇到j(luò)s執(zhí)行時(shí)序問題5. mysql 5個(gè)left關(guān)鍵 然后再用搜索條件 幾千條數(shù)據(jù)就會(huì)卡,如何解決呢6. 按照本節(jié)給的代碼“膽小如鼠”并不能變成紅色7. mysql - 在不允許改動(dòng)數(shù)據(jù)表的情況下,如何優(yōu)化以varchar格式存儲(chǔ)的時(shí)間的比較?8. python3.x - git bash如何運(yùn)行.bat文件?9. javascript - 為什么在谷歌控制臺(tái) 輸出1的時(shí)候,輸出的1立馬就不見了10. javascript - position fixed;設(shè)置了height 100 卻不是瀏覽器可視窗口的寬高,求大神釋疑。
