Django:如何在登录时在admin中设置默认语言

Django:如何在登录时在admin中设置默认语言,django,django-admin,django-middleware,Django,Django Admin,Django Middleware,我正在将用户的默认语言保存在他的用户配置文件中,登录时我想将管理员的默认语言设置为它 我考虑的一种可能性是使用中间件,但我认为如果我在process\u request上这样做,我不会在那里看到用户对象,因为这是在中间件之后处理的,所以我只能在下一个请求之后设置它 我们高度赞赏任何解决方案 可悲的是,Django在登录/注销时没有发送任何信号(很明显,在登录/注销时有一张罚单) 但环顾四周,我发现了一个相当简单而优雅的解决方案,可以在登录/注销时实现信号,而不必触碰Django的代码:您可以执行

我正在将用户的默认语言保存在他的用户配置文件中,登录时我想将管理员的默认语言设置为它

我考虑的一种可能性是使用中间件,但我认为如果我在
process\u request
上这样做,我不会在那里看到用户对象,因为这是在中间件之后处理的,所以我只能在下一个请求之后设置它

我们高度赞赏任何解决方案

可悲的是,Django在登录/注销时没有发送任何信号(很明显,在登录/注销时有一张罚单)

但环顾四周,我发现了一个相当简单而优雅的解决方案,可以在登录/注销时实现信号,而不必触碰Django的代码:

您可以执行以下操作: 在templates/admin/login.html中

<script type="text/javascript">
            $(function(){
                $.ajax({
                    type : 'POST',
                    url : "{% url 'setLangueDefault' %}",
                    dataType : 'JSON',
                    success : function(data) {
                        //
                    }
                });
            });
        </script>
)

在frontend/views.py中

from django.conf import settings
...
def setLangueDefault(request):
    language = settings.LANGUAGE_CODE
    if hasattr(request, 'session'):
        if 'django_language' in request.session:
            language = request.session['django_language']
    if language:
        request.session['django_language'] = language
    if request.is_ajax():
        message = {'status' : 0, 'info' : 'done'}
        return JsonResponse(json.dumps(message))
    return HttpResponseRedirect('/')
注意settings.py中的配置默认语言 Exp:LANGUAGE_CODE='vi'

这是固定的,我们现在可以享受登录/注销信号了!:)
from django.conf import settings
...
def setLangueDefault(request):
    language = settings.LANGUAGE_CODE
    if hasattr(request, 'session'):
        if 'django_language' in request.session:
            language = request.session['django_language']
    if language:
        request.session['django_language'] = language
    if request.is_ajax():
        message = {'status' : 0, 'info' : 'done'}
        return JsonResponse(json.dumps(message))
    return HttpResponseRedirect('/')