Строка соответствия регулярному выражению, начинающаяся с ?code=

#python #regex #django #django-views #django-urls

#python #регулярное выражение #django #django-представления #django-urls

Вопрос:

Я использую python и django для сопоставления URL-адресов для моего сайта. Мне нужно сопоставить URL-адрес, который выглядит следующим образом: /company/code/?code=34k3593d39k

Часть после ?code= — это любая комбинация букв и цифр и любой длины.

Я пробовал это до сих пор:

 r'^company/code/(. )/$'
r'^company/code/(w )/$'
r'^company/code/(D )/$'
r'^company/code/(.*)/$'
  

Но пока никто не улавливает выражение. Есть идеи? Спасибо

Ответ №1:

code=34k3593d39k является GET параметром, и вам не нужно определять шаблон для него в шаблоне URL. Вы можете получить к ней доступ, используя request.GET.get('code') under view . Шаблон должен быть просто:

 r'^company/code/$'
  

Использование, доступ к параметру GET:

 def my_view(request):
    code = request.GET.get('code')
    print code
  

Проверьте документацию:

URLconf выполняет поиск по запрошенному URL-адресу, как обычная строка Python. Это не включает параметры GET или POST или имя домена.

Комментарии:

1. Должно ли это быть code = request.GET.get(«code»)? Потому что я получаю UnboundLocalError, где я ссылаюсь на код перед его назначением

2. @user3749797 Да, простая опечатка.

Ответ №2:

Первый шаблон будет работать, если вы переместите последний / сразу после ^ :

 >>> import re
>>> re.match(r'^/company/code/(. )$', '/company/code/?code=34k3593d39k')
<_sre.SRE_Match object at 0x0209C4A0>
>>> re.match(r'^/company/code/(. )$', '/company/code/?code=34k3593d39k').groups()
('?code=34k3593d39k',)
>>>
  

Также обратите внимание, что ^ в этом нет необходимости, поскольку re.match совпадения начинаются с начала строки:

 >>> re.match(r'/company/code/(. )$', '/company/code/?code=34k3593d39k').groups()
('?code=34k3593d39k',)
>>>