Djangoでアプリケーション作ってるんだけど,templates内で掛け算ってできないのかな?
Djangoはテンプレート内で直接処理ができるようになってないの.
だから,タグやフィルターを使って便利な計算ができるように設計されているのよ.
でもね,できないこともあって...
足し算,引き算は出来るけど,掛け算,割り算はできないの!
だから,自分でフィルターを作る必要があるの.
今回は,引数2つの掛け算の方法を紹介するね!
自作フィルター 準備
以下に事前に必要な処理を書いておきます.
- アプリケーションディレクトリの下にtemplatetagsディレクトリを作成
- templatestagsディレクトリ内に空のファイル「__init__.py」を作成
- templatestagsディレクトリ内に処理を記述するファイルを作成(今回はmultiple_tag.pyとしました)
処理内容
簡単なサンプルプログラムとして,価格と個数の掛け算で金額を出すプログラムを記述していきます.
#models.py
from django.db import models
class Sales_volume(models.Model):
name = models.CharField(max_length=20)
quantity = models.IntegerField()
price = models.IntegerField()
def __str__(self):
return self.name
#views.py
from django.shortcuts import render
from django.views import View
from .models import Sales_volume
class IndexView(View):
def get(self, request):
obj = Sales_volume.objects.all()
params = {
'sales_volume': obj
}
return render(request, 'example_app/index.html', params)
<--index.html-->
{% load multiple_tag %} #重要
{% block main %}
<table>
<tr>
<th>個数</th>
<th>値段</th>
<th>合計</th>
</tr>
{% for item in sales_volume %}
<tr>
<td>{{ item.quantity }}</td>
<td>{{ item.value }}</td>
<td>{{ item.value |multiply:item.quantity }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
<--multiple.html-->
from django import template
register = template.Library()
@register.filter(name="multiply")
def multiply(value, quantity):
return value * quantity
templateのhtmlファイルで”{% load multiple_tag %}”を忘れないように!
コメント