在 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 中,这个模板标签可以工作。请尝试我的解决方案,在我的项目中它有效。这里有一些datetimedocs.djangoproject.com/en/dev/ref/templates/builtins/#date的标签

以上是关于在 django 模板中格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板中的日期/时间格式

Django“naturalday”模板过滤器:回退到格式化日期?

更改 django 默认日期模板格式

Django 2021年最新版教程28前端模板中 时间日期星期格式化

django 模板从查询集更改了日期格式

在 Django 中扩展 Babel 日期格式标签