Django:get_language in settings.py

Django:get_language in settings.py,django,Django,我使用Django的身份验证系统实现了用户登录/注册,但遇到了麻烦,希望有人能帮助我 该网站使用django localeurl,目前使用3种语言运行 我无法将登录重定向传递到正确的语言。 我要做的是将当前语言传递给settings.py中的LOGIN\u REDIRECT\u URL变量,这样就不用: LOGIN_REDIRECT_URL = '/accounts/my_account/' 我要的是: LOGIN_REDIRECT_URL = '/%s/accounts/my_account

我使用Django的身份验证系统实现了用户登录/注册,但遇到了麻烦,希望有人能帮助我

该网站使用django localeurl,目前使用3种语言运行

我无法将登录重定向传递到正确的语言。 我要做的是将当前语言传递给settings.py中的LOGIN\u REDIRECT\u URL变量,这样就不用:

LOGIN_REDIRECT_URL = '/accounts/my_account/'
我要的是:

LOGIN_REDIRECT_URL = '/%s/accounts/my_account/' % request.LANGUAGE_CODE
这当然不起作用,因为我没有将请求传递给settings.py

有没有一个非常简单和聪明的方法来做到这一点?它总是默认为英语,这是一个大问题。如果用户以西班牙语查看网站,登录后将重定向到英语:/

我的语言设置如下:

gettext = lambda s: s
LANGUAGES = (
    ('pt', gettext('Portuguese')),
    ('es', gettext('Spanish')),
    ('en', gettext('English')),
)

因为管理员需要用英语

有人能帮忙吗


谢谢

我想它不会像你试图解决它那样起作用。我将设置登录重定向时调用的视图,并在该视图中确定语言设置等,然后再次重定向到正确的视图+正确的区域设置

我想它不会像你试图解决它那样起作用。我将设置登录重定向时调用的视图,并在该视图中确定语言设置等,然后再次重定向到正确的视图+正确的区域设置

对于我使用的翻译:它适合我使用3种语言和14个位置。看看吧,也许能带你到某个地方。

对于我使用的翻译:它有3种语言和14个位置,非常适合我。查看它,可能会带您到某个地方。

对于我自己的此类项目,我使用我自己的登录重定向装饰程序,而不是Django提供的,Django总是将我发送到settings.py中定义的静态url。我的i18n装饰器看起来是这样的:

def i18n_login_required(function):
    def wrap(request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/%s/accounts/login/?next=%s' % (get_language(), request.GET.get('next', urlquote(request.get_full_path()))))
        return function(request, *args, **kwargs)
    wrap.__doc__=function.__doc__
    wrap.__name__=function.__name__
    return wrap

对于我自己的此类项目,我使用自己的login_redirect decorator,而不是Django提供的,Django总是将我发送到settings.py中定义的静态url。我的i18n装饰器看起来是这样的:

def i18n_login_required(function):
    def wrap(request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/%s/accounts/login/?next=%s' % (get_language(), request.GET.get('next', urlquote(request.get_full_path()))))
        return function(request, *args, **kwargs)
    wrap.__doc__=function.__doc__
    wrap.__name__=function.__name__
    return wrap

我已经试过了,但没有成功:我会再看一看,看看是否能用其他方法解决它。谢谢。我已经试过了,但没有成功:我会再看一看,看看是否能用其他方法解决它。谢谢