urls template parse python django parsing url

python - template - Recuperando parámetros de una URL



url parse python (14)

El módulo urlparse proporciona todo lo que necesita:

urlparse.parse_qs ()

Dada una URL como la siguiente, ¿cómo puedo analizar el valor de los parámetros de consulta? Por ejemplo, en este caso quiero el valor de def .

/abc?def=''ghi''

Estoy usando Django en mi entorno; ¿Hay algún método en el objeto de request que pueda ayudarme?

Intenté usar self.request.get(''def'') pero no está devolviendo el valor ghi como esperaba.


En Python puro:

def get_param_from_url(url, param_name): return [i.split("=")[-1] for i in url.split("?", 1)[-1].split("&") if i.startswith(param_name + "=")][0]


Estoy sorprendido de que esta solución ya no esté aquí. Utilizar:

self.request.GET.get(''variable_name'')

Esto "obtendrá" la variable del diccionario "GET" y devolverá el valor ''variable_name'' si existe, o un objeto None si no existe.


Hay una bonita biblioteca w3lib.url

from w3lib.url import url_query_parameter url = "/abc?def=ghi" print url_query_parameter(url, ''def'') ghi


Hay una nueva biblioteca llamada furl. Encuentro que esta biblioteca es muy pitónica para hacer álgebra de url. Instalar:

pip install furl

Código:

from furl import furl f = furl("/abc?def=''ghi''") print f.args[''def'']


La URL a la que hace referencia es un tipo de consulta y veo que el objeto de solicitud admite un método llamado arguments para obtener los argumentos de la consulta. También puede probar self.request.get(''def'') directamente para obtener su valor del objeto.


No hay necesidad de hacer nada de eso. Solo con

self.request.get(''variable_name'')

Tenga en cuenta que no estoy especificando el método (GET, POST, etc.). Esto está bien documentado y este es un ejemplo

El hecho de que uses plantillas de Django no significa que Django también procese el controlador


Por cierto, tenía problemas al usar parse_qs () y obtener parámetros de valor vacíos y aprendí que tiene que pasar un segundo parámetro opcional ''keep_blank_values'' para devolver una lista de los parámetros en una cadena de consulta que no contiene valores. Por defecto es falso. Algunas API maliciosas escritas requieren que los parámetros estén presentes incluso si no contienen valores

for k,v in urlparse.parse_qs(p.query, True).items(): print k


Pruebe con algo como esto:

import urlparse url = ''http://foo.appspot.com/abc?def=ghi'' parsed = urlparse.urlparse(url) print urlparse.parse_qs(parsed.query)[''def'']


Sé que esto es un poco tarde, pero desde que me encontré aquí hoy, pensé que esta podría ser una respuesta útil para los demás.

import urlparse url = ''http://example.com/?q=abc&p=123'' parsed = urlparse.urlparse(url) params = urlparse.parse_qsl(parsed.query) for x,y in params: print "Parameter = "+x,"Value = "+y

Con parse_qsl (), "Los datos se devuelven como una lista de pares de nombres y valores".


para Python> 3.4

from urllib import parse url = ''http://foo.appspot.com/abc?def=ghi'' query_def=parse.parse_qs(parse.urlparse(url).query)[''def''][0]


def getParams(url): params = url.split("?")[1] params = params.split(''='') pairs = zip(params[0::2], params[1::2]) answer = dict((k,v) for k,v in pairs)

Espero que esto ayude


import cgitb cgitb.enable() import cgi print "Content-Type: text/plain;charset=utf-8" print form = cgi.FieldStorage() i = int(form.getvalue(''a''))+int(form.getvalue(''b'')) print i


import urlparse url = ''http://example.com/?q=abc&p=123'' par = urlparse.parse_qs(urlparse.urlparse(url).query) print par[''q''], par[''p'']