Django设置LOGIN_REDIRECT_URL基于语言的动态

时间:2019-07-08 09:29:41

标签: python django

假设我有LOGIN_REDIRECT_URL ='/ foo / bar /'并且我在http://127.0.0.1/en/login/上,并且我成功登录了。我将被重定向到http://127.0.0.1/foo/bar/,导致丢失语言前缀。为了保持网址中的语言代码,我该怎么办?当然,我希望所有其他语言代码也能正常工作,就像这样:

http://127.0.0.1/en/login/ -> http://127.0.0.1/en/foo/bar/
http://127.0.0.1/login/ -> http://127.0.0.1/foo/bar/
http://127.0.0.1/ro/login/ -> http://127.0.0.1/ro/foo/bar/

2 个答案:

答案 0 :(得分:0)

在这种情况下,您可以扩展Django的LoginView并覆盖get_success_url方法。

类似这样的东西:

from django.contrib.auth.views import LoginView
from django.utils.translation import get_language



class CustomLoginView(LoginView):
    def get_success_url(self):
        # lang = get your language from the URL (it'd be helpful if you post your URLs in order to help better) or you can use like this:
        lang = get_language()
        url = '{}/{}/login'.format(yourbaseurl, lang)
        return url

答案 1 :(得分:0)

假设您正在使用Django auth和框架中的LoginView,则可以对URL进行参数设置,以使其登录后重定向到该URL。LOGIN_REDIRECT_URL是未指定时的后备选项。

LoginView属性称为next。可以使用上一页中的参数(例如next)来设置?next=<your_url>网址。只是不要忘记使用is_safe_url()中的django.utils.http对其进行消毒。