使用 django.shortcuts.redirect 添加 request.GET 变量

发布于 2024-09-24 13:35:55 字数 274 浏览 3 评论 0原文

是否可以在重定向中添加 GET 变量? (无需修改我的 urls.py)

如果我执行 redirect('url-name', x)

我会得到 HttpResponseRedirect('/my_long_url/%s/', x) code>

我没有抱怨使用 HttpResponseRedirect('/my_long_url/%s/?q=something', x) 代替,但只是想知道......

Is possible to add GET variables in a redirect ? (Without having to modifiy my urls.py)

If I do redirect('url-name', x)

I get HttpResponseRedirect('/my_long_url/%s/', x)

I don't have complains using HttpResponseRedirect('/my_long_url/%s/?q=something', x) instead, but just wondering...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

万人眼中万个我 2024-10-01 13:35:55

由于重定向仅返回一个 HttpResponseRedirect 对象,因此您可以更改它:

response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response

Since redirect just returns an HttpResponseRedirect object, you could just alter that:

response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response
巡山小妖精 2024-10-01 13:35:55

是否可以在重定向中添加 GET 变量? (无需修改我的 urls.py)

我不知道有什么方法可以在不修改 urls.py 的情况下执行此操作。

我没有抱怨使用 HttpResponseRedirect('/my_long_url/%s/?q=something', x) 代替,但只是想知道......

您可能想编写一个薄包装器来使这更容易。比如说,custom_redirect

def custom_redirect(url_name, *args, **kwargs):
    from django.core.urlresolvers import reverse 
    import urllib
    url = reverse(url_name, args = args)
    params = urllib.urlencode(kwargs)
    return HttpResponseRedirect(url + "?%s" % params)

然后可以从您的视图中调用它。例如

return custom_redirect('url-name', x, q = 'something')
# Should redirect to '/my_long_url/x/?q=something'

Is possible to add GET variables in a redirect ? (Without having to modifiy my urls.py)

I don't know of any way to do this without modifying the urls.py.

I don't have complains using HttpResponseRedirect('/my_long_url/%s/?q=something', x) instead, but just wondering...

You might want to write a thin wrapper to make this easier. Say, custom_redirect

def custom_redirect(url_name, *args, **kwargs):
    from django.core.urlresolvers import reverse 
    import urllib
    url = reverse(url_name, args = args)
    params = urllib.urlencode(kwargs)
    return HttpResponseRedirect(url + "?%s" % params)

This can then be called from your views. For e.g.

return custom_redirect('url-name', x, q = 'something')
# Should redirect to '/my_long_url/x/?q=something'
风向决定发型 2024-10-01 13:35:55

我们可以从 django 导入 urlencode。

from django.utils.http import urlencode

get_args_str = urlencode({'q': 'something'})

或者我们可以只使用启动请求中未解析的获取参数字符串

get_args_str = request.META['QUERY_STRING']

HttpResponseRedirect('%s?%s' % (url, get_args_str))

We can import urlencode from django.

from django.utils.http import urlencode

get_args_str = urlencode({'q': 'something'})

Or we can just use unparsed get parameters string from starting request

get_args_str = request.META['QUERY_STRING']

HttpResponseRedirect('%s?%s' % (url, get_args_str))
下雨或天晴 2024-10-01 13:35:55

我认为值得注意的是,Django 的 RedirectView 类有一个内置的类属性 query_string,可以覆盖或传递给 as_view。如果设置为 Truequery_string 将在重定向中保留查询字符串。例如,您可以将以下内容放入 urls.py 中:

path('example-redirect/',
     RedirectView.as_view(url='https://example.com', query_string=True),
     name='example_redirect')

I think it's worth noting that Django's RedirectView class has a built-in class attribute query_string which can be overridden or passed to as_view. If set to True, query_string will preserve the query string in the redirect. For example, you could put the following in urls.py:

path('example-redirect/',
     RedirectView.as_view(url='https://example.com', query_string=True),
     name='example_redirect')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文