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('/')