23

如果我有视图,如何使用参数转到特定的 URL

def search(request):

并在 urls.py

^search/$ 

我需要做的是重定向search/?item=4

c = {}
render_to_response("search.html",c) 

工作正常,但是

render_to_response("search.html/?item=" + itemID, c )

它说没有找到模板(我知道没有像 search.html/?item= 这样的模板)但是我怎样才能传递参数或使用查询字符串来重定向?

4

5 回答 5

39

使用 reverse 并传递 url 的名称,我们可以使用查询字符串重定向到 url:

#urls.py

url(r'^search/$', views.search, name='search_view')

#views.py

from django.shortcuts import redirect, reverse

# in method
return redirect(reverse('search_view') + '?item=4')
于 2015-10-29T07:31:04.657 回答
12

我知道这个问题有点老了,但是有人会在使用查询字符串搜索重定向时偶然发现这个问题,所以这是我的解决方案:

import urllib
from django.shortcuts import redirect

def redirect_params(url, params=None):
    response = redirect(url)
    if params:
        query_string = urllib.urlencode(params)
        response['Location'] += '?' + query_string
    return response

def your_view(request):
    your_params = {
        'item': 4
    }
    return redirect_params('search_view', your_params)
于 2017-01-26T14:34:06.813 回答
2

如果您已经有一个请求(带有包含一些参数的 GET),并且您想重定向到具有相同 args、kwargs 和参数的不同视图,我们可以使用 QueryDict 对象对自身进行 url 编码:

def view(request, *args, **kwargs):
    return redirect(
        reverse('your:view:path', args=args, kwargs=kwargs) + 
        '?' + request.GET.urlencode()
    )
于 2021-11-12T00:57:07.280 回答
1

更通用的选择;

from urllib.parse import urlencode
from django.shortcuts import redirect as django_redirect


def redirect(url, *args, params=None, **kwargs):
    query_params = ""
    if params:
        query_params += '?' + urlencode(params)
    return django_redirect(url+query_params, *args, **kwargs)

于 2020-06-05T12:58:24.600 回答
0

在携带当前查询字符串的同时重定向到另一个页面:

views.py

from django.urls import reverse
from django.shortcuts import redirect

def my_view(request):
    #get the current query string
    q = request.META['QUERY_STRING']
    return redirect(reverse('search_view') + '?' + q)
于 2020-05-15T10:54:40.233 回答