web-dev-qa-db-fra.com

Récupérer les paramètres d'une URL

Étant donné une URL comme celle-ci, comment puis-je analyser la valeur des paramètres de requête? Par exemple, dans ce cas, je veux la valeur de def.

/abc?def='ghi'

J'utilise Django dans mon environnement; existe-t-il une méthode sur l'objet request qui pourrait m'aider?

J'ai essayé d'utiliser self.request.get('def') mais il ne renvoie pas la valeur ghi comme je l'espérais.

137
niteshb

Python 2:

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

Python 3:

import urllib.parse as urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print(urlparse.parse_qs(parsed.query)['def'])
212
systempuntoout
import urlparse
url = 'http://example.com/?q=abc&p=123'
par = urlparse.parse_qs(urlparse.urlparse(url).query)

print par['q'][0], par['p'][0]
52
Cris

Je suis choqué que cette solution ne soit pas déjà là. Utilisation:

request.GET.get('variable_name')

Cela "obtiendra" la variable du dictionnaire "GET" et renverra la valeur 'nom_variable' s'il existe ou un objet Aucun s'il n'existe pas.

44
jball037

pour 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]
34
Anatoly E

Je sais que c'est un peu tard, mais comme je me suis retrouvé ici aujourd'hui, j'ai pensé que cela pourrait être une réponse utile pour les autres.

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

Avec parse_qsl (), "Les données sont renvoyées sous forme de liste de paires nom/valeur."

17
iCanHasFay

Il existe une nouvelle bibliothèque appelée furl. Je trouve cette bibliothèque très pythonique pour faire de l’algèbre d’URL. À installer:

pip install furl

Code:

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

L'URL que vous faites référence est un type de requête et je vois que l'objet de requête prend en charge une méthode appelée arguments pour obtenir les arguments de la requête. Vous pouvez également vouloir essayer self.request.get('def') directement pour obtenir votre valeur de l'objet.

5
Senthil Kumaran

En pur Python:

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]
3
Asym

Le module urlparse fournit tout ce dont vous avez besoin:

urlparse.parse_qs ()

3
Andreas Jung

Il n'y a pas besoin de faire quoi que ce soit. Seulement avec

self.request.get('variable_name')

Notez que je ne spécifie pas la méthode (GET, POST, etc.). Ceci est bien documenté et ceci est un exemple

Le fait que vous utilisiez Django templates ne signifie pas que le gestionnaire est également traité par Django

3
chachan
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)

J'espère que cela t'aides

3
inspectorG4dget
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
2
George

Il y a une belle bibliothèque w3lib.url

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

Btw, j'avais des problèmes en utilisant parse_qs () et obtenir des paramètres de valeur vide et appris que vous devez passer un deuxième paramètre optionnel 'keep_blank_values' pour renvoyer une liste des paramètres dans une chaîne de requête qui ne contient aucune valeur. La valeur par défaut est false. Certaines API écrites merdiques nécessitent la présence de paramètres même si elles ne contiennent aucune valeur

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