Как сопоставить символ вопроса в URL-адресе Django?
В моем приложении Django у меня есть URL-адрес, который я хотел бы сопоставить, который выглядит примерно так:
/mydjangoapp/?parameter1=hello¶meter2=world
Проблема здесь - это?? символ является зарезервированным символом регулярного выражения.
Я пробовал несколько способов сопоставить это... Это была моя первая попытка:
(r'^pbanalytics/log/\?parameter1=(?P<parameter1>[\w0-9-]+)¶meter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')
Это была моя вторая попытка:
(r'^pbanalytics/log/\\?parameter1=(?P<parameter1>[\w0-9-]+)¶meter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')
но все равно не повезло!
Кто-нибудь знает, как я могу сопоставить '?' точно в URL-адрес Django?
Ответы
Ответ 1
не делать. Вы не должны сопоставлять строку запроса с диспетчером URL.
Вы можете получить доступ ко всем значениям с помощью словаря request.GET
.
URLs
(r'^pbanalytics/log/$', 'mydjangoapp.myFunction')
функция
def myFunction(request)
param1 = request.GET.get('param1')
Ответ 2
Шаблоны URL Django соответствуют только компоненту пути URL. Вы также пытаетесь найти ответ на запрос, поэтому у вас проблемы. Ваше первое регулярное выражение делает то, что вы хотели, за исключением того, что вы всегда должны соответствовать компоненту пути.
В вашем представлении вы можете получить доступ к querystring с помощью request.GET
Ответ 3
Символ ?
является зарезервированным символом в regex, да. Ваша первая попытка выглядит так, как будто ее можно избежать.
Однако ?
в URL также является концом пути и началом query (например: protocol://host/path/?query#hash
.
Диспетчер URL-адресов Django не позволяет отправлять URL-адреса на основе части запроса AFAIK.
Мое предложение должно было бы написать представление django, которое выполняет диспетчеризацию на основе параметра request.GET
для вашей функции просмотра.
Ответ 4
Способ сделать то, что исходный вопрос был, то есть catch-all в URL dispatch var...
url(r'^mens/(?P<pl_slug>.+)/$', 'main.views.mens',),
или
url(r'^mens/(?P<pl_slug>\?+)/$', 'main.views.mens',),
Насколько это необходимо, GET-URL точно не предоставляет хорошие "постоянные ссылки" или хорошую презентацию в целом для клиентов и клиентов.
Клиенты часто запрашивают, чтобы URL-адрес был отформатирован i.e.
www.example-clothing-site.com/mens/tops/shirts/t-shirts/Big_Brown_Shirt3XL
это гораздо более читаемый интерфейс для конечного пользователя и обеспечивает лучшую общую презентацию для клиента.