django模板上的算术运算符

时间:2018-05-05 23:07:22

标签: django django-templates

这是我的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>

如何使<td>{{ holiday.date_to - holiday.date_from }}</td>工作,我应该使用HolidayListView吗?...

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

谢谢你!

3 个答案:

答案 0 :(得分:1)

您可以使用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>

答案 1 :(得分:1)

您可以使用自定义模板过滤器,但一般来说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 :(得分:0)

在模板级别,您可以使用mathfilters

对我非常有用。然后您可以执行以下操作:

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

@maxim指出,这不是理想的方法。最好的方法仍然是在视图或模型上进行操作。但这确实可以满足我的需求。