Django通过session实现多语言切换

本文介绍了如何在Django项目中实现自定义的多语言切换功能,以应对大段落内容的翻译需求。通过使用不同的模板并利用session存储语言和模板名,确保用户在请求时能获取正确的页面。同时,文章指出了Django session的保存策略问题,并提供了修改SESSION_SAVE_EVERY_REQUEST设置以确保语言切换的正确保存,同时也讨论了如何在不影响效率的情况下实现这一目标。
摘要由CSDN通过智能技术生成

  公司官网需要多语言支持(中文/英文),了解了一通之后,发现Django虽然有自带的国际化多语言功能,但是仅限于翻译单词,官网这种有很多大段落介绍的内容,就不太适合了。所以自己来实现。

  实现的思路也很简单,就是中英文使用不同的模板,在命名上进行区别,如index.htmlindex_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 &#

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值