我将用户的默认语言保存在他的用户个人资料中,登录时我想将管理员的默认语言设置为它。
我正在考虑的一种可能性是使用中间件,但我认为如果我这样做,process_request我不会在那里看到用户对象,因为这是在中间件之后处理的,所以我只能在下一个请求之后设置它!
任何解决方案都非常感谢!
我将用户的默认语言保存在他的用户个人资料中,登录时我想将管理员的默认语言设置为它。
我正在考虑的一种可能性是使用中间件,但我认为如果我这样做,process_request我不会在那里看到用户对象,因为这是在中间件之后处理的,所以我只能在下一个请求之后设置它!
任何解决方案都非常感谢!
可悲的是 Django 在登录/注销时没有发送任何信号(显然在http://code.djangoproject.com/ticket/5612上有一张票)。
但是环顾四周,我发现了一个相当简单而优雅的解决方案,可以在不接触 Django 代码的情况下实现登录/注销信号:http: //charlesleifer.com/blog/hooking-into-djangos-login-and-logout-two-approaches/
您可以执行以下操作:在 templates/admin/login.html
<script type="text/javascript">
$(function(){
$.ajax({
type : 'POST',
url : "{% url 'setLangueDefault' %}",
dataType : 'JSON',
success : function(data) {
//
}
});
});
</script>
在前端/urls.py
urlpatterns = patterns('frontend.views',
...
url(r'^set-language-default/$', views.setLangueDefault, name='setLangueDefault'),
....
)
在前端/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'