You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:33:08