ユーザーのデフォルト言語をユーザー プロファイルに保存しており、ログイン時に管理者のデフォルト言語をそれに設定したいと考えています。
私が考えていた1つの可能性は、ミドルウェアを使用することですが、これを実行するとprocess_request
、ミドルウェアの後に処理されるため、そこにユーザーオブジェクトが表示されないため、次のリクエストの後にしか設定できなかったと思います!
どんな解決策も大歓迎です!
ユーザーのデフォルト言語をユーザー プロファイルに保存しており、ログイン時に管理者のデフォルト言語をそれに設定したいと考えています。
私が考えていた1つの可能性は、ミドルウェアを使用することですが、これを実行すると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>
frontend/urls.py 内
urlpatterns = patterns('frontend.views',
...
url(r'^set-language-default/$', views.setLangueDefault, name='setLangueDefault'),
....
)
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' の構成のデフォルト言語に注意してください。