Django中为DateField设置默认时间

1
2
3
4
5
from django.db import models
import datetime

class Foo(models.Model):
someday = models.DateField(default=datetime.date.today) # 设置默认时间为今天

Django 1.11 TypeError context must be a dict rather than Context

1
2
3
4
5
def current_datetime(request):
now = datetime.datetime.now()
t = get_template('current_datetime.html')
html = t.render(Context({'current_date': now}))
return HttpResponse(html)

在Django 1.11.11版本中运行会出现“TypeError context must be a dict rather than Context”的错误信息。

错误信息

查阅 Stack Overflow 得知原因:

在Django 1.8+中,模板的render方法需要传入一个参数为字典的上下文实例,即ctx({key: value})。在Django 1.10+中,render方法传递一个Context实例已被弃用。
因此上述代码在Django 1.11中应改为:

1
t.render({'current_date': now}) #get_template.render() 直接传入字典

如果仍想以传入Context实例的方式渲染模版,可以使用下面的方法:

1
2
from django.template.loader import render_to_string
t.render_to_string(Context('current_date': now))

补充:
其实,Django为渲染模板提供了更为简单的方式:

1
2
3
4
5
from django.shortcuts import render
import datetime
def current_datetime(request):
now = datetime.datetime.now() #获取当前时间
return = render(request, 'current_datetime.html', {'current_date'}: now)