Отображение только дней в шаблоне django

Я пытаюсь отобразить разницу между двумя датами на django, и мне удалось сделать это, но теперь я пытаюсь отобразить только дни, без времени, есть ли какой-нибудь фильтр, который я могу использовать?

Мой 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})

Мой вывод: Output print

Я думаю, есть несколько способов сделать то, что вы хотите. Я позволю вам решить, что лучше всего подходит для вас.

  1. Теги форматирования шаблонов timesince или timeuntil в Django могут дать вам то, что вы хотите немедленно.

{{ 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.

Вот пример, показывающий разницу в днях между объектом datetime:

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

Я не думаю, что это то, что вам нужно, но вот другой пример, использующий strftime и timedelta для получения более конкретного форматирования:

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

Дни с момента начала - это свойство вашего контракта, поэтому вы можете создать фактическое свойство в модели контракта

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 %}
Вернуться на верх