如何在模板中减去两个django日期

时间:2018-03-06 13:58:21

标签: python django date django-templates

我希望获得今天和模型字段 end_date 之间的天数。 我今天在我看来定义如下所示。 然后,我将使用天数来检查它是否小于或等于50,这将为<td></td>元素添加一个类

我的模板

{% for instance in queryset %}
    <tr>
        <td>{{forloop.counter}}</td>
        <td>{{instance.empnumber}}</td>
        <td>{{instance.name}}</td>
        <td>{{instance.be}}</td>
        <td>{{instance.status}}</td>
        {% if (today - instance.end_date) <= 50 %}
            <td class="highlight">{{instance.start_date}}</td>
            <td class="highlight">{{instance.end_date}} : {{ instance.end_date|timeuntil:today }}</td>
        {% else %}
            <td>{{instance.status_start_date}}</td>
            <td>{{instance.status_end_date}}</td>
        {% endif %}
    </tr>
{% endfor %}

我的观点

if request.user.is_authenticated():
    queryset = Employee.objects.all().order_by('-last_updated')
    today = date.today()
    context = {
        "queryset": queryset,
        "today": today,
    }

2 个答案:

答案 0 :(得分:3)

我会在Employee对象上创建一个方法。

class Employee(models.Model):
    ...
    def ends_within_50_days(self):
        return (date.today() - self.end_date).days <= 50

现在你可以这样做:

{% if instance.ends_within_50_days %}

答案 1 :(得分:0)

正如上一个答案中所建议的,您可以在模型类中创建一个方法,或者我将使用属性。

假设你有类似的东西:

new

在您的模板中,您可以检查它是否少于50天:

from datetime import date
from django.db import models

class Employee(models.Model):
    end_date = models.DateField()
    # ... rest ...

    @property
    def age_in_days(self):
        today = date.today()
        result = end_date - today
        return result.days

属性{% if instance.age_in_days <= 50 %} 将返回今天与age_in_days之间的天数差异作为整数。这样可以为您提供更大的灵活性,以防您不仅要检查它是否少于50天。最终该要求可能会改变。然后,您可以重用该属性而无需重构模型。

您仍然可以在模型类中定义一个方法来检查实例是否在过去50天内结束:

end_date