Джанго 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 6

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 параметром.

Вы не сопоставляете их с регулярным выражением. Элементы после ? не являются частью URL-адреса, они являются параметрами запроса, доступ к которым можно получить из вашего представления через request.GET.