假设我有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/
答案 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
对其进行消毒。