为网站配置HTTPS传输协议

2018-05-12更新

全站启用https访问,http的80端口转发到https的443端口,nginx配置可以这样写:

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
return 301 https://$host$request_uri;
} #80端口的流量转发到https

server {
listen 443;
server_name domain.com;
...
}
阅读更多

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)