python - django 模板里如何多个值相加?
PHP中文网
PHP中文网 2017-04-18 10:30:19
0
2
477

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 %}

求解,或者有没有其他的实现方法?

PHP中文网
PHP中文网

认证0级讲师

membalas semua(2)
巴扎黑

Mengikut keperluan yang anda nyatakan, terdapat dua penyelesaian:
1 Kira dalam views.py dan kemudian pindahkan ke templat
2 Seperti berikut:

Langkah pertama: Buat folder templatetags baharu dalam direktori aplikasi projek anda (folder ini berada pada tahap yang sama dengan views.py dan models.py anda), dan buat __init__.py dan add_value dalam fail py ini , struktur direktori adalah seperti berikut:


|-- views.py
|-- models.py
|templatetags
    |-- __init__.py
    |-- add_value.py

Langkah 2: Edit fail __init__.py dan add_value.py. Fail __init__.py boleh kosong Kandungan fail add_value.py adalah seperti berikut:

# 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

Langkah 3: Dalam views.py:


# 这里假设你order_list的值是[{'key': 1}, {'key': 2}, {'key': 3}]
render(request, 'orders/order_list.html', {'order_list': [{'key': 1}, {'key': 2}, {'key': 3}]})

Langkah 4: Tambahkan {% load add_value %} pada templat order_list.html anda, kemudian gunakan <p>{{ order_list|add_value }}</p>

Pada akhirnya, anda sepatutnya dapat mencapai keperluan anda. Saya harap ia dapat membantu anda.

Ty80

Tidakkah anda boleh mengendalikannya terus dalam paparan dan kemudian merujuknya dalam templat?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!