Django テンプレートで掛け算(前編)

プログラミング

Djangoでアプリケーション作ってるんだけど,templates内で掛け算ってできないのかな?

Djangoはテンプレート内で直接処理ができるようになってないの.

だから,タグやフィルターを使って便利な計算ができるように設計されているのよ.

でもね,できないこともあって...

足し算,引き算は出来るけど,掛け算割り算はできないの!

だから,自分でフィルターを作る必要があるの.

今回は,引数2つの掛け算の方法を紹介するね!

自作フィルター 準備

以下に事前に必要な処理を書いておきます.

  1. アプリケーションディレクトリの下にtemplatetagsディレクトリを作成
  2. templatestagsディレクトリ内に空のファイル「__init__.py」を作成
  3. 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 %}”を忘れないように!

コメント

タイトルとURLをコピーしました