我正在使用i18n_patterns
国际化我的应用程序并且它正在工作,除非我单击需要登录的链接(受@login_required
装饰器保护的视图),我被重定向到默认语言而不是当前活动的登录表单。
如何保留活动 URL?换句话说,当在法语部分时,我想@login_required
重定向我/fr/login/?next=/fr/clients/
而不是/en/login/?next=/fr/clients/
我有同样的问题,我通过编辑settings.py解决了它:
from django.core.urlresolvers import reverse_lazy
LOGIN_URL = reverse_lazy('login')
函数 reverse_lazy 在 URL 上添加正确的语言前缀!(“登录”是您的登录路线的名称)
我不精通 Django 的 i18n,但我认为这实际上是不可能的,因为在装饰器应用程序点将login_required
其参数绑定login_url
到装饰函数。您最好编写自己的装饰器;假设您不使用任何一个可选参数 to login_required
,您可以将自己的设置为
from django.contrib.auth.views import redirect_to_login
from django.core.urlresolvers import reverse
import functools
def login_required(fn):
@functools.wraps(fn)
def _decorated(request, *args, **kwargs):
if request.user.is_authenticated():
return fn(request, *args, **kwargs)
path = request.get_full_path()
login_url = reverse('login')
return redirect_to_login(path, login_url)
reverse('login') 获取您在您的登录视图中的任何名称urls.py
。
我还没有对此进行测试,但如果出现问题,我会尽我所能对其进行调试。