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

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级讲师

répondre à tous(2)
巴扎黑

Selon les besoins que vous avez mentionnés, il existe deux solutions :
1. Calculez-le dans vues.py puis transférez-le dans le modèle
2. Personnalisez les filtres du modèle pour l'implémenter. Comme suit :

Première étape : créez un nouveau dossier templatetags dans le répertoire app de votre projet (ce dossier est au même niveau que vos vues.py et models.py), et créez __init__.py et add_value dans ce dossier. , la structure des répertoires est la suivante :


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

Étape 2 : Modifiez les fichiers __init__.py et add_value.py. Le fichier __init__.py peut être vide. Le contenu du fichier add_value.py est le suivant :

# 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

Étape 3 : Dans vues.py :


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

Étape 4 : Ajoutez {% load add_value %} à votre modèle order_list.html, puis utilisez <p>{{ order_list|add_value }}</p>

En fin de compte, vous devriez pouvoir répondre à vos besoins. J'espère que cela pourra vous aider.

Ty80

Ne pouvez-vous pas le gérer directement dans la vue, puis le référencer dans le modèle ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal