2010-09-22 25 views
39

Có thể thêm biến GET trong chuyển hướng không? (Mà không cần phải modifiy urls.py của tôi)thêm biến request.GET bằng cách sử dụng django.shortcuts.redirect

Nếu tôi làm redirect('url-name', x)

tôi nhận được HttpResponseRedirect('/my_long_url/%s/', x)

tôi không có phàn nàn sử dụng HttpResponseRedirect('/my_long_url/%s/?q=something', x) thay vào đó, nhưng chỉ tự hỏi ...

+0

typo nhỏ trong câu trả lời từ Manoj Govindan: params = urllib.urlencode (** kwargs) cần phải được thay thế với params = urllib.urlencode (kwargs) Nếu không, bạn nhận được "TypeError: urlencode() đã nhận được đối số từ khóa không mong muốn" – Max

Trả lời

35

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

Tôi không biết cách nào để thực hiện việc này mà không cần sửa đổi urls.py.

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

Bạn có thể muốn viết một trình bao bọc mỏng để làm việc này dễ dàng hơn. Nói, 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) 

Điều này sau đó có thể được gọi từ chế độ xem của bạn. Ví dụ:

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

+1 giải pháp Thanh lịch, cảm ơn. – juanefren

+0

Nó phải là params = urllib.urlencode (kwargs) – Regneel

+2

Trong Python 3, sử dụng 'urllib.parse.urlencode' –

91

Kể từ khi chuyển hướng chỉ trả về một đối tượng HttpResponseRedirect, bạn chỉ có thể thay đổi mà:

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

+1 Giải pháp nhanh chóng hoạt động, cảm ơn. – juanefren

+0

Thao tác này sẽ không hoạt động đối với các URL có neo. – Kolyunya

+0

Dễ dàng sử dụng 'urldefrag' nếu đó là một khả năng. Cảm ơn bạn đã chỉ ra lỗi tiềm ẩn nếu bạn có một neo trong phản hồi url của mình. – SmileyChris

Các vấn đề liên quan