2010-05-31 120 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'