Джанго URL-адресов, используя? в url
Я пытаюсь сделать некоторые сопоставления URL Django.
Я хочу несколько адресов, где я http://mysite.com/base?sort=type1/, http://mysite.com/base?sort=type2/ и т. д.
Я не могу понять, как URL-адрес соответствует этим выражениям: я очень новичок в Django и никогда не использовал Reg Ex раньше.
Что у меня есть для urls.py в моем" базовом " приложении есть:
url(r'^$','base.views.main, name='main'),
Я не могу понять, что поставить, чтобы соответствовать моим URL-адресам с вопросительными знаками.
Я пытаюсь что-то сделать. как
url(r'^?sort=popular/$', 'base.views.main_popular', name='main_popular'),
Спасибо за помощь!
2 ответа:
? не будет соответствовать "?"внутри url , вместо этого он имеет свой собственный смысл, который вы можете посмотреть здесь :
регулярные выражения Python Если вы хотите точно соответствовать характеру "?"внутри вашего url-адреса вы должны каким-то образом избежать его ( потому что он имеет значение в регулярных выражениях), поэтому вы можете избежать его с помощью" \ " (обратная косая черта ) так вы бы написали \?сортировать....Правка:
Итак, с тем, что вы сказали в комментариях, кажется, вот ваша проблема,main?sort=popular
происходит на вашем url шаблон при рендеринге шаблона для/main/
с аргументом словаря методаGET
изsort=popular
, Просто напишите функцию, которая различаетGET
иPOST
, в частиGET
, имеет sth, какsort_by = request.GET.get('sort','')
, а затем отсортируйте соответственно со значением переменной sort_by, будет sth, как:def main_handler(request): if request.method == "POST": whatever ... if request.method == "GET" : sort_by = request.GET.get('sort','') if sort_by: sort by what sort points to return "the sorted template" return render_to_response(the page and it's args)
И отпустить это ? внутри шаблон URL , который добавляется, когда вы запрашиваете страницу с GET параметром.