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>
如何使<td> holiday.date_to - holiday.date_from </td>
工作,我应该使用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 模板上的算术运算符的主要内容,如果未能解决你的问题,请参考以下文章