2012-07-01 11 views
19

Tengo este url = https://stackoverflow.com/questions/ask?next=1&value=3 Ahora necesito obtener la cadena de consulta de esta url. No quiero usar request.META para obtener la cadena de consulta. Cómo siempre lo he descubierto que hay dos maneras de conseguir más de la cadena de consulta¿La mejor manera de obtener una cadena de consulta desde una URL en python?

  1. Usando urlparse Uso urlparse.urlparse (url) .query DATS que

  2. Usando url codificar uso urlencode y pasar el diccionario request.GET params en él, para obtener la representación de cadena de la misma ....

Entonces, ¿qué camino es mejor para obtener la cadena de consulta ...? Algunos de mis colegas dicen que urlencode es mucho mejor, pero no estoy satisfecho con las respuestas hasta el momento ... como mencionaron urlparse llamadas urlencode internamente ... Incluso en este punto tengo dudas ya que creo que urlparse y urlencode son completamente independent.as urlencode está en el módulo urllib ... aclaren esto.

Respuesta

38

Usted puede hacer de cadena de consulta utilizando parámetros GET como esto

request.GET.urlencode() 

Esto no incluye el prefijo ?, y puede que no devuelva las claves en el mismo orden que en la solicitud original.

+7

Es importante tener en cuenta que, dado que QueryDict ajusta un diccionario desordenado, request.GET.urlencode() no puede devolver las claves en el mismo orden en que aparecen en el URI de solicitud original. – Aaron

+1

Eso es fundamental en los diccionarios en realidad. Además, la mayoría de las cadenas de consulta deben considerarse desordenadas si están codificadas. Si es una lista verdadera, se ordenará. – uchuugaka

50

Tercera opció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']} 

En Python 3+ esta disponible como:

from urllib.parse import parse_qs 

Documentation for urllib.parse

+6

De acuerdo, no estoy seguro de por qué querría la cadena de consulta y no la procesare, pero usar urlparse es la forma más legible y comprensible. –

+0

Esto realmente me ayudó: necesitaba un Mapa (u otro objeto) que tuviera los parámetros de una URL de solicitud. –

Cuestiones relacionadas