Как мне сопоставить знак вопроса в URL Django? - PullRequest
16 голосов
/ 31 марта 2011

В моем приложении Django у меня есть URL-адрес, который я хотел бы сопоставить, который выглядит примерно так:

/mydjangoapp/?parameter1=hello&parameter2=world

Проблема здесь заключается в '?'символ является зарезервированным регулярным выражением.

Я пробовал несколько способов соответствовать этому ... Это была моя первая попытка:

(r'^pbanalytics/log/\?parameter1=(?P<parameter1>[\w0-9-]+)&parameter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')

Это была моя вторая попытка:

(r'^pbanalytics/log/\\?parameter1=(?P<parameter1>[\w0-9-]+)&parameter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')

но все равно не повезло!

Кто-нибудь знает, как я могу сопоставить '?'точно в URL Django?

Ответы [ 4 ]

34 голосов
/ 31 марта 2011

Не. Вы не должны сопоставлять строку запроса с URL Dispatcher. Вы можете получить доступ ко всем значениям, используя request.GET словарь.

URLs

(r'^pbanalytics/log/$', 'mydjangoapp.myFunction')

функция

def myFunction(request) 
  param1 = request.GET.get('param1')
2 голосов
/ 31 марта 2011

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

По вашему мнению, вы можете получить доступ к строке запроса через request.GET

1 голос
/ 11 сентября 2014

Способ сделать исходный вопрос, т. Е. Перехват всех URL-адресов var ...

url(r'^mens/(?P<pl_slug>.+)/$', 'main.views.mens',),

или

url(r'^mens/(?P<pl_slug>\?+)/$', 'main.views.mens',),

Поскольку зачем это нужно , URL-адреса GET не дают хороших "постоянных ссылок" или хорошей презентации в целом для клиентов и для клиентов.

Клиенты часто запрашивают, чтобы URL был отформатирован, т.е.

www.example-clothing-site.com/mens/tops/shirts/t-shirts/Big_Brown_Shirt3XL

это гораздо более удобочитаемый интерфейс для конечного пользователя и обеспечивает лучшее общее представление для клиента.

1 голос
/ 31 марта 2011

Символ ? является зарезервированным символом в регулярном выражении, да.Ваша первая попытка выглядит как правильное экранирование.

Однако ? в URL также является концом пути и началом query part (например: protocol://host/path/?query#hash. Диспетчер URL Django не позволяет отправлять URL-адреса на основе части запроса, AFAIK.

Мое предложение будет писатьпредставление django, которое выполняет диспетчеризацию на основе параметра request.GET для вашей функции просмотра.

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