在 django 模板中格式化日期
Posted
技术标签:
【中文标题】在 django 模板中格式化日期【英文标题】:Formatting date in django template 【发布时间】:2016-03-23 18:36:50 【问题描述】:我的模板以以下格式呈现标签 test.date
-
2015-12-15T23:55:33.422679
当我尝试使用 django 的内置模板标签 date
对其进行格式化时,它不显示任何内容。
我尝试过的变体:
test.date|date:"SHORT_DATE_FORMAT"
test.date|date:"D d M Y"
models.py:
class Human(models.Model):
name = models.CharField(max_length=50,default='',blank=False)
class Test(models.Model):
human = models.ForeignKey(Human)
date = models.DateTimeField(default=datetime.now)
views.py:
def list(request):
h = Human.objects.all()
s=[]
for her in h:
t = h.test_set.all()
s.extend(t)
context = RequestContext(request, 'test_list': s,)
return render_to_response('template.html', context)
然后我在这样的模板中使用它:
% for test in test_list %
test.date
% endfor %
我错过了什么?
【问题讨论】:
看起来不错,您在不使用|date :
的情况下看到了什么?您可以添加有问题的视图
你应该把你的代码放在有问题的地方
这里的test.date
是什么?它是一个实际的日期时间对象,还是一个字符串时间戳?
@DanielRoseman 编辑了代码。请检查。
@Baterson 已编辑。请立即查看。
【参考方案1】:
回答旧帖子...但是,答案似乎(对我来说)不是回答原始问题 - 这是为什么 Django 内联模板日期格式不起作用...
答案是(我相信)作者试图向他的页面输出如下内容:
"This is my date:test.date|date:"D d M Y"."
如果这确实是正在尝试的问题,那么问题是双引号在这种情况下不起作用。您需要执行以下操作:
"This is my date:test.date|date:'D d M Y'."
注意单引号...
【讨论】:
【参考方案2】:我不确定你想从这个逻辑中得到什么,但我认为你可以使用这个:
def list(request):
test = Test.objects.all()
return render(request, 'template.html', 'test':test)
在模板中:
% for t in test %
% t.date %
% endfor %
如果你想显示人,只需添加循环% t.human.name %
【讨论】:
您的代码有何不同?我也在做同样的事情。以test_list
传递测试列表,然后使用test.date
@qwertp 如果您创建了Test
对象,它会更加清晰和简单,并且可以正常工作
但这不是我的问题。我的问题是我无法使用date
模板标签格式化test.date
。我想知道是否可以使用测试对象的查询集来获得解决方案
您在test.date
中看到的内容,没有模板标签date|
?。在像我现在这样的 django 1.8 中,这个模板标签可以工作。请尝试我的解决方案,在我的项目中它有效。这里有一些datetime
docs.djangoproject.com/en/dev/ref/templates/builtins/#date的标签以上是关于在 django 模板中格式化日期的主要内容,如果未能解决你的问题,请参考以下文章
Django“naturalday”模板过滤器:回退到格式化日期?