在 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})
我的输出:
我认为这里有几种方法可以满足您的需求。我会让你决定你认为最适合你的。
- Django 中的
timesince
或 timeuntil
模板格式化标签可能会立即为您提供所需内容。
{{ 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
模块。
这是一个显示日期时间对象之间天数差异的示例:
import datetime
now = datetime.datetime.now()
startingDate = now + datetime.timedelta(days=7)
daysRemaining = (startingDate-now).days
print(daysRemaining) # INFO: prints '7'
我认为这不是您想要的,但这是另一个示例,使用 strftime
和 timedelta
获得更具体的格式:
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 %}
我试图在 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})
我的输出:
我认为这里有几种方法可以满足您的需求。我会让你决定你认为最适合你的。
- Django 中的
timesince
或timeuntil
模板格式化标签可能会立即为您提供所需内容。
{{ 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
模块。
这是一个显示日期时间对象之间天数差异的示例:
import datetime
now = datetime.datetime.now()
startingDate = now + datetime.timedelta(days=7)
daysRemaining = (startingDate-now).days
print(daysRemaining) # INFO: prints '7'
我认为这不是您想要的,但这是另一个示例,使用 strftime
和 timedelta
获得更具体的格式:
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 %}