Получение параметров из URL - PullRequest
131 голосов
/ 22 февраля 2011

С учетом URL, подобного следующему, как я могу проанализировать значение параметров запроса? Например, в этом случае я хочу значение def.

/abc?def='ghi'

Я использую Django в своей среде; есть ли метод для объекта request, который мог бы мне помочь?

Я пытался использовать self.request.get('def'), но он не возвращает значение ghi, как я надеялся.

Ответы [ 14 ]

202 голосов
/ 22 февраля 2011

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'])
52 голосов
/ 31 января 2013
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]
43 голосов
/ 12 мая 2014

Я в шоке, это решение уже не здесь. Использование:

request.GET.get('variable_name')

Это «получит» переменную из словаря «GET» и вернет значение «variable_name», если оно существует, или объект None, если он не существует.

34 голосов
/ 12 января 2017

для 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]
17 голосов
/ 17 марта 2016

Появилась новая библиотека под названием furl.Я считаю эту библиотеку наиболее питонической для выполнения алгебры URLДля установки:

pip install furl

Код:

from furl import furl
f = furl("/abc?def='ghi'") 
print f.args['def']
17 голосов
/ 01 марта 2014

Я знаю, что это немного поздно, но так как я оказался здесь сегодня, я подумал, что это может быть полезным ответом для других.

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

С parse_qsl (), "Данные возвращаются каксписок имен, пар значений. "

5 голосов
/ 22 февраля 2011

URL, на который вы ссылаетесь, является типом запроса, и я вижу, что объект запроса поддерживает метод с именем arguments для получения аргументов запроса.Вы также можете попробовать self.request.get('def') напрямую, чтобы получить ваше значение от объекта.

3 голосов
/ 25 августа 2017

В чистом 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 голосов
/ 05 октября 2014

Нет необходимости делать это.Только с

self.request.get('variable_name')

Обратите внимание, что я не указываю метод (GET, POST и т. Д.).Это хорошо документировано и это пример

Тот факт, что вы используете шаблоны Django, не означает, что обработчик также обрабатывается Django

3 голосов
/ 22 февраля 2011

Модуль urlparse предоставляет все необходимое:

urlparse.parse_qs ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...