django 模板上的算术运算符

Posted

技术标签:

【中文标题】django 模板上的算术运算符【英文标题】:Arithmetic Operator on django Templates 【发布时间】:2018-10-16 02:44:48 【问题描述】:

这里是我的models.py

class HolidayListView(ListView):
    context_object_name = 'national_holidays'
    model = models.NationalHoliday

我有一个像holiday_list.html这样的模板

<td> holiday.date_from </td>
<td> holiday.date_to </td>
<td> holiday.date_to - holiday.date_from </td>

如何使&lt;td&gt; holiday.date_to - holiday.date_from &lt;/td&gt; 工作,我应该使用HolidayListView 吗?...

可以直接在我的模板上吗?...

谢谢!

【问题讨论】:

【参考方案1】:

在模板级别你可以使用mathfilters

对我很有用。然后你可以做ff:

<td> holiday.date_to|sub:holiday.date_from </td>

正如@maxim 指出的那样并不理想..最好的方法仍然是在视图或模型上进行..但它确实很好地满足了我的需要。

【讨论】:

【参考方案2】:

您可以使用自定义模板过滤器,但通常 Django 建议在视图或模型层进行此类计算,事实上这就是为什么 Django 模板在允许的操作方面提供的灵活性较低。

你可以这样实现它:

型号:

class NationalHoliday(models.Model):
    # Model attributes...

    @property
    def length_days(self):
        return (self.date_to - self.date_from).days

模板:

<td> holiday.date_from </td>
<td> holiday.date_to </td>
<td> holiday.length_days </td>

相关问题:How to do math in a Django template?

【讨论】:

看起来很简单,如果我做2个或更多property,我需要把@property每个功能吗? 是的,您需要为每个要定义为类属性的方法添加属性装饰器:stackabuse.com/python-properties。但是这里的属性装饰器是可选的,您也可以将其定义为常规方法 - 模板引擎将两者视为相同。【参考方案3】:

你可以用Custom template tags and filters做到这一点

from django import template
register = template.Library()

@register.filter
def substract_date(date_to,date_from):
    return (date_to - date_from).days

html 将是

<td> holiday.date_to|substract_date:holiday.date_from </td>

【讨论】:

以上是关于django 模板上的算术运算符的主要内容,如果未能解决你的问题,请参考以下文章

Python-图像上的算术运算

python-opencv图像上的算术运算

JavaScript运算符

OpenCV的核心操作 —— 图像的基本操作+图像上的算术运算

C#如何对二维数组矩阵进行算术运算

运算或算术指令