Django-在GET之后将用户重定向到特定视图,更改语言设置

时间:2019-06-24 15:40:01

标签: python django cookies translation

我有一个网站,提供2种语言选择-英语和日语。

要在两种语言之间进行切换,用户单击一个按钮即可将其带到更改设置的视图。以前,它总是重定向到主页,但是现在我想将它们带到以前的位置。

当前路径作为url参数传递,然后保存到响应变量,然后在返回之前设置其语言cookie。

由于某种原因,当我在redirect函数中使用参数时,语言cookie根本没有设置,而是使用了reverse(例如,当它被硬编码返回家中时)工作正常。

如何使带有参数的redirect函数像与reverse设置的函数一样工作?

谢谢!

代码:

模板链接:

<a href="{% url 'language' 'en' %}?q={{ request.path }}" class="lang-choice btn btn-primary">English</a>
<a href="{% url 'language' 'ja' %}?q={{ request.path }}" class="lang-choice btn btn-info">日本語</a>

网址:

path('lang/<str:language>/', v.change_language, name='language')

查看:

def change_language(request, language): # language is 'en' or 'ja'
    redirect_page = request.GET.get('q') # e.g. '/about/'
    # note: redirect_page == reverse('about') is True

    # make sure language is available
    valid = False
    for l in settings.LANGUAGES:
        if l[0] == language:
            valid = True
    if not valid:
        raise Http404(_('選択した言語は利用できません'))

    # Make language the setting for the session
    translation.activate(language)
    response = redirect(redirect_page) # Changing this to use reverse works

    response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language)
    return response

1 个答案:

答案 0 :(得分:0)

我找到了解决上述问题的方法。 通过将{{ request.resolver_match.url_name }}添加到标签的查询参数中,然后在视图内对该查询参数调用reverse来解决:

链接:

<a href="{% url 'language' 'en' %}?q={{ request.path }}" class="lang-choice btn btn-primary">English</a>

收件人:

<a href="{% url 'language' 'en' %}?q={{ request.resolver_match.url_name }}" class="lang-choice btn btn-primary">English</a>

然后重构视图:

response = redirect(redirect_page)

收件人:

response = redirect(reverse(redirect_url_name))