经过广泛的谷歌搜索,我仍然没有想出一种有效的方法来解决这个问题。
我正在使用Django创建网站。我有一个数据库,其中包含时间数据,更具体地说是日期。 “时间”的值设置为3000-01-01(YYYY-MM-DD),这是时间查询的常见做法。
我想做的是显示一个字符串,例如“ Now”或“ Present”或任何其他值,而不是日期3000-01-01。我可以在任何地方使用某种全局替代吗?在每个视图/模板中对其进行硬编码似乎很浪费。
干杯!
答案 0 :(得分:0)
由于正在渲染,因此我建议不要对DateField
进行“ 子类化”,以使其渲染'now'
而不是原始的date(..)
对象:它将使模型层中的计算更加麻烦。
解决这个问题的一种好方法是实现template filter [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|nowdate }}
因此,我们在这里获取some_date_field
变量的some_model
(此属性因此是date(..)
对象),然后将其传递给我们构造的nowdate
过滤器这样,如果它是3000-01-01,则将其替换为'present'
字符串。
这里的优点是,如果我们以后改变对“出现”日期的看法,我们可以在模板过滤器中轻松更改它,此外,我们可以轻松地扩展它,例如通过添加一个'past'
,'future'
等