如何进行重定向并保留查询字符串?
Posted
技术标签:
【中文标题】如何进行重定向并保留查询字符串?【英文标题】:How to make a redirect and keep the query string? 【发布时间】:2012-05-21 03:17:05 【问题描述】:我想进行重定向并保留查询字符串。 self.redirect
之类的东西加上发送的查询参数。这可能吗?
【问题讨论】:
你想把它放在哪里?在会话中? 我不能只通过 HTTP GET 传递查询参数吗? 当然,我不知道您使用的是哪个框架,但这应该很简单。在直接 http 中,您将发送 301 或 303,并将 Location 标头设置为重定向 url 以及要保留的查询参数。 是的,这就是我想做的,我认为这很简单。我使用 webapp2 和谷歌应用引擎,我将这些标签添加到问题中。 @Wooble 我可以一个一个地尝试参数,但我正在寻找一种方法来将整个查询字符串添加到单行中。我知道我想通过 HTTP GET 获取的参数的名称,并且我想传递它们的值。我认为应该有一种方法可以传递整个地图,而不是一次传递一个变量。 【参考方案1】:newurl = '/my/new/route?' + urllib.urlencode(self.request.params)
self.redirect(newurl)
【讨论】:
无法在龙卷风 4 中运行 可以在当时的新版本中使用urllib.parse.urlencode(self.request.query_arguments, doseq=True)
。【参考方案2】:
您可以使用self.request.query_string
获取当前请求的查询字符串;因此,您可以使用self.redirect('/new/url?' + self.request.query_string)
重定向到新的 URL。
【讨论】:
无法在龙卷风 4 中运行【参考方案3】:这在 Django 2.2 中对我有用。查询字符串可用作 QueryDict 实例 request.GET
用于 HTTP GET 和 request.POST
用于 HTTP POST。将这些转换为普通字典,然后使用urlencode
。
from django.utils.http import urlencode
query_string = urlencode(request.GET.dict()) # or request.GET.urlencode()
new_url = '/my/new/route' + '?' + query_string
见https://docs.djangoproject.com/en/2.2/ref/request-response/。
【讨论】:
【参考方案4】:使用RedirectView
。
from django.views.generic.base import RedirectView
path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com', query_string=True), name='go-to-django')
【讨论】:
以上是关于如何进行重定向并保留查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章