公司官网需要多语言支持(中文/英文),了解了一通之后,发现Django虽然有自带的国际化多语言功能,但是仅限于翻译单词,官网这种有很多大段落介绍的内容,就不太适合了。所以自己来实现。
实现的思路也很简单,就是中英文使用不同的模板,在命名上进行区别,如index.html
和index_en.html
,然后在用户的session中加入config对象,包含language和templateName两个属性,分别记录 语言 和 当前模板名称。每次收到request的时候,都校验一下session,从中取出语言和模板设置,然后返回相应的html文件即可。
先记录一下session的读写使用:
# 创建或修改 session:
request.session[key] = value
# 获取 session:
request.session.get(key,default=None)
# 删除 session
del request.session[key] # 不存在时报错
另外请注意注意: Django的session有个大坑!!!session有下边三个参数:
1、SESSION_SAVE_EVERY_REQUEST
如果设置为True,django为每次request请求都保存session的内容,默认为False。
2、SESSION_EXPIRE_AT_BROWSER_CLOSE
如果设置为True,浏览器已关闭session就过期了,默认为False。
3、SESSION_COOKIE_AGE
设置SESSION的过期时间,单位是秒,默认是两周
发现没,Django默认情况下,只有session在增删的时候,才会保存。如果仅仅改变值,那么不会触发保存,所以一定要在settings.py中修改1的设置,不然切换语言之后,实际上无法正确保存在session中。
将1设置为True之后,Django将在每次收到请求之后都保存session,不论它的值是否变化。但是这样的话,似乎又影响了效率,我们只要在需要的时候保存就可以了。那么还有一个方式,在保存之后,设置request.session.modified &#