Отображение только дней в шаблоне 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})
Я думаю, есть несколько способов сделать то, что вы хотите. Я позволю вам решить, что лучше всего подходит для вас.
- Теги форматирования шаблонов
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
- Другой вариант - использовать модуль
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 %}