我有一个网站,提供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
答案 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))