如何为Django Sessions设置默认值?多语言站点默认语言配置
给新Session设置默认语言的解决方案
这个需求我在开发多语言站点时刚好碰到过,最优雅的解决方式就是用自定义中间件——它能在每个请求处理前自动检查Session,给没有设置lang的新Session补上默认值,彻底避免KeyError问题。
步骤1:创建自定义中间件
在你的Django应用下新建一个middleware.py文件,写入以下代码:
from django.utils.deprecation import MiddlewareMixin from django.utils import translation class DefaultLanguageMiddleware(MiddlewareMixin): def process_request(self, request): # 检查Session中是否存在lang键,不存在则设置默认值为'de' if 'lang' not in request.session: request.session['lang'] = 'de' # 可选:同步到Django的翻译系统,让站点语言自动匹配Session值 translation.activate(request.session['lang']) request.LANGUAGE_CODE = translation.get_language()
步骤2:注册中间件
打开项目根目录的settings.py,找到MIDDLEWARE列表,把我们的中间件添加进去——注意顺序很重要:必须放在SessionMiddleware之后(这样才能正常访问request.session),如果用到了LocaleMiddleware,要放在它之前:
MIDDLEWARE = [ # ... 其他系统默认中间件 ... 'django.contrib.sessions.middleware.SessionMiddleware', # 加入我们的自定义中间件 'your_app_name.middleware.DefaultLanguageMiddleware', 'django.middleware.locale.LocaleMiddleware', # ... 其他中间件 ... ]
这个方案的优势
- 自动处理所有新Session:用户第一次访问站点时,Session里会自动带上
lang='de',再也不会出现KeyError - 不覆盖已有设置:如果用户之后切换了语言(比如把
lang改成en),中间件只会对空值生效,不会修改用户已选的偏好 - 可选同步翻译系统:代码里的额外同步逻辑,能让Django的全局语言设置和Session里的
lang保持一致,不用单独处理语言切换后的站点适配
内容的提问来源于stack exchange,提问作者Ablivion
相关产品推荐
相关产品推荐

