2010-05-31 97 views
4

我在他的用户配置文件保存在用户的默认语言,并在登录我想将管理员的默认语言设置为它。Django的:如何设置默认语言在管理上登录

我想到的一种可能性是使用中间件,但我认为如果我在process_request上执行该操作,则不会在该处看到用户对象,因为这是在中间件之后处理的,所以我只能在下一个请求!
任何解决方案,不胜感激!

回答

3

可悲的是Django不发送的登录/注销的任何信号(显然有一票开放,在http://code.djangoproject.com/ticket/5612)。

但环顾四周,我发现对于没有接触Django的代码实现对登录/注销的信号相当简单和优雅的解决方案:http://charlesleifer.com/blog/hooking-into-djangos-login-and-logout-two-approaches/

+2

即[票](https://code.djangoproject.com/机票/ 5612)已修好,我们现在可以享受登录/注销信号! :) – 2011-06-21 15:37:18

1

你可以做如下: 在模板/管理/ 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 精通配置默认语言:LANGUAGE_CODE = 'VI'