#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',)
>>>