2012-07-01 29 views
19

Tôi có url này = https://stackoverflow.com/questions/ask?next=1&value=3 Bây giờ tôi cần nhận chuỗi truy vấn từ url này. Tôi không muốn sử dụng request.META để nhận chuỗi truy vấn. Làm thế nào bao giờ tôi figured it out rằng có nhiều cách để có được hai chuỗi truy vấnCách tốt nhất để nhận chuỗi truy vấn từ URL trong python?

  1. Sử dụng urlparse Sử dụng urlparse.urlparse (url) .query dats nó

  2. Sử dụng url mã hóa Sử dụng urlencode và chuyển request.GET params dictionary vào nó, để lấy biểu diễn chuỗi của nó ....

Vậy cách nào tốt hơn để lấy chuỗi truy vấn ...? Một số đồng nghiệp của tôi đang nói rằng urlencode là tốt hơn nhiều, tuy nhiên tôi không hài lòng mở rộng câu trả lời cho đến nay ... như họ đã đề cập urlparse cuộc gọi urlencode nội bộ quá ..Tại điểm này tôi có nghi ngờ như tôi nghĩ urlparse và urlencode là hoàn toàn độc lập.as urlencode là trong mô-đun urllib .... xin vui lòng làm rõ điều này.

Trả lời

38

Bạn có thể làm cho chuỗi truy vấn sử dụng các tham số GET như thế này

request.GET.urlencode() 

Điều này không bao gồm tiền tố ? và có thể không trả lại các khóa theo thứ tự như trong yêu cầu ban đầu.

+7

Điều quan trọng cần lưu ý là kể từ khi QueryDict kết thúc một từ điển không có thứ tự, request.GET.urlencode() có thể không trả về các khóa theo cùng thứ tự mà chúng xuất hiện trong URI yêu cầu ban đầu. – Aaron

+1

Đó là cơ bản của từ điển thực sự. Ngoài ra, hầu hết các chuỗi truy vấn nên được coi là không có thứ tự nếu chúng được khóa. Nếu đó là danh sách thực, nó sẽ được đặt hàng. – uchuugaka

50

Thứ ba tùy chọn:

>>> from urlparse import urlparse, parse_qs 
>>> url = 'http://something.com?blah=1&x=2' 
>>> urlparse(url).query 
'blah=1&x=2' 
>>> parse_qs(urlparse(url).query) 
{'blah': ['1'], 'x': ['2']} 

Trong Python 3+ này có sẵn như:

from urllib.parse import parse_qs 

Documentation for urllib.parse

+6

OK, không hoàn toàn chắc chắn lý do bạn muốn chuỗi truy vấn và chưa xử lý chuỗi truy vấn, nhưng việc sử dụng urlparse là cách dễ đọc nhất và dễ hiểu nhất. –

+0

Điều này thực sự đã giúp tôi - Tôi cần một Bản đồ (hoặc một số đối tượng) đã tổ chức các thông số từ một URL yêu cầu! –

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