在 django 模板上仅显示天数

Display only days on django template

我试图在 django 上显示 2 个给定日期之间的差异,我已经成功了,但现在我很难只显示日期,没有时间,是否有任何过滤器可以我可以用吗?

我的 html 模板:

<a href="{% url 'edit_contract' contract.id %}">
    {% if contract.status == 'PN'  %}
        {{ today |sub:contract.starting_date  }}
    {% else %}
        TODO
    {% endif %}
</a>

我的看法:

@login_required
def contract_list(request):
    contracts = Contract.objects.filter(user=request.user)
    total_contracts_value = Contract.objects.filter(user=request.user).aggregate(sum=Sum('value'))['sum'] or 0
    contracts_count = Contract.objects.filter(user=request.user).count()
    today = date.today()
    return render(request, 'list_contract.html', {'contracts': contracts,
                                                       'total_contracts_value': total_contracts_value,
                                                       'contracts_count': contracts_count, 'today':today})

我的输出:

我认为这里有几种方法可以满足您的需求。我会让你决定你认为最适合你的。

  1. Django 中的 timesincetimeuntil 模板格式化标签可能会立即为您提供所需内容。

{{ today |timeuntil:contract.starting_date }}

https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#timesince https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#timeuntil

  1. 另一种选择是使用 datetime 模块。

这是一个显示日期时间对象之间天数差异的示例:

import datetime
now = datetime.datetime.now()
startingDate = now + datetime.timedelta(days=7)
daysRemaining = (startingDate-now).days
print(daysRemaining) # INFO: prints '7'

我认为这不是您想要的,但这是另一个示例,使用 strftimetimedelta 获得更具体的格式:

tomorrowFormatted = datetime.datetime.strftime(datetime.datetime.now() + datetime.timedelta(days=1), "%d-%b-%Y")

Days since start 是您合同的 属性,因此您可以在合同模型中创建一个实际的 属性

from datetime import date
from django.db import models

class Contract(models.Model):
    ...
    @property
    def days_since_start(self):
        today = date.today()
        result = today - self.start_date
        return result.days

然后参考模板中的 属性

    {% if contract.status == 'PN'  %}
            {{ contract.days_since_start }}
    {% else %}