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'']