【问题标题】:Set language of PasswordResetForm in Django?在 Django 中设置 PasswordResetForm 的语言?
【发布时间】:2020-06-01 00:03:16
【问题描述】:

我正在手动重置密码,但想知道如何将语言设置为用户的语言而不是我自己的语言。我看到有很多额外的上下文字段,但需要设置哪一个?

for user in qs:
    reset_form = PasswordResetForm({'email': user.email})
    # reset_form.language?
    assert reset_form.is_valid()
    reset_form.save(request=request)

我添加了一个字段CustomUser.language,可以在上面的user.language 中找到。

(在表达我的问题并寻找可能性时,我找到了一个可行的解决方案。)

【问题讨论】:

    标签: python django django-i18n


    【解决方案1】:

    通过将当前语言(会话方式)临时设置为用户的语言,我得出了以下解决方案:

    from django.utils import translation
    
    temp_language = translation.get_language_from_request(request)
    for user in qs:
        translation.activate(user.language)
        request.LANGUAGE_CODE = translation.get_language()
        reset_form = PasswordResetForm({'email': user.email})
        assert reset_form.is_valid()
        reset_form.save(request=request)
        # https://stackoverflow.com/questions/2336785/set-language-within-a-django-view/2336889#comment12481631_2336889
        translation.deactivate()
    translation.activate(temp_language)
    request.LANGUAGE_CODE = translation.get_language()
    

    【讨论】:

    • 你也可以用with translation.override(user.language)代替activatedeactivate
    • @IgorJerosimić 如果你用它发布一个有效的答案,我会接受它
    猜你喜欢
    • 2011-01-21
    • 2013-10-26
    • 2013-09-27
    • 2020-01-20
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多