cari

Rumah  >  Soal Jawab  >  teks badan

python - django 模板里如何多个值相加?

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中文网2787 hari yang lalu535

membalas semua(2)saya akan balas

  • 巴扎黑

    巴扎黑2017-04-18 10:32:19

    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.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:32:19

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

    balas
    0
  • Batalbalas