【问题标题】: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 获取的参数的名称,并且我想传递它们的值。我认为应该有一种方法可以传递整个地图,而不是一次传递一个变量。

标签: python google-app-engine python-2.7 wsgi webapp2


【解决方案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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 2015-09-16
      • 2018-05-11
      • 2015-06-06
      相关资源
      最近更新 更多