Django - 在 GET 之后将用户重定向到特定视图到一个单独的视图,更改语言设置
Django - redirecting a user to a specific view after GET to a separate view, changing language settings
我有一个网站提供 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
我找到了解决上述问题的方法。
通过将 {{ request.resolver_match.url_name }}
添加到标签的查询参数,然后在视图中对该查询参数调用 reverse
来修复:
Link:
<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))
我有一个网站提供 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
我找到了解决上述问题的方法。
通过将 {{ request.resolver_match.url_name }}
添加到标签的查询参数,然后在视图中对该查询参数调用 reverse
来修复:
Link:
<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))