Поскольку это рендеринг, я бы посоветовал не использовать " подклассы " для DateField
, чтобы он отображал 'now'
вместо исходного объекта date(..)
: он сделает вычисления на уровне модели болеегромоздкий.
Вероятно, хороший способ справиться с этим - реализовать шаблонный шаблон [Django-doc] , например, мы можем создать файл:
# app/templatetags/nowdate.py
from django import template
register = template.Library()
PRESENT = date(3000, 1, 1)
@register.filter
def nowdate(value):
if value == PRESENT:
return 'present'
return value
Каталог templatetags
приложения app
также должен содержать файл __init__.py
(пустой файл), и, конечно, app
должен быть частью INSTALLED_APPS
в settings.py
.
Затем мы можем использовать его в шаблоне, например:
<!-- app/templates/app/some_template.html -->
{{ some_model.some_date_field<b>|nowdate</b> }}
Здесь мы, таким образом, получаем some_date_field
переменной some_model
(таким образом, этот атрибутобъект date(..)
), и мы пропускаем его через фильтр nowdate
, который мы сконструировали так, что если он равен 3000-01-01, он заменяется строкой 'present'
.
Преимуществоздесь то, что, если мы позже передумаем о том, что дата "настоящее", мы можем легко изменить его вФильтр шаблонов, кроме того, мы можем легко расширить его, например, добавив 'past'
, 'future'
и т. д.