我使用的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')
Run Code Online (Sandbox Code Playgroud)
函数reverse_lazy 在 URL 上添加正确的语言前缀!(“login”是您的登录路径的名称)
我不太熟悉 Django 的 i18n,但我认为这实际上不可能,因为在装饰器应用程序时login_required将其参数绑定到装饰函数。login_url你最好编写自己的装饰器;假设您不使用任何可选参数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)
Run Code Online (Sandbox Code Playgroud)
其中,reverse('login') 获取您的登录视图的名称urls.py。
我还没有对此进行测试,但如果出现问题,我会尽力调试它。