2012-08-22 18 views
6

Próbuję dopasować niektóre adresy URL Django.Django URLS, używając? w adresie URL

chcę kilka adresów URL, gdzie mam http://mysite.com/base?sort=type1/, http://mysite.com/base?sort=type2/ itp

nie mogę dowiedzieć się, jak do URL pasują do tych wyrażeń: Jestem bardzo nowy Django i nigdy nie używane Reg Ex wcześniej.

Co mam dla urls.py w moim „bazy” Aplikacja jest:

url(r'^$','base.views.main, name='main'), 

nie mogę dowiedzieć się, co umieścić, aby dopasować swoje adresy URL ze znakami zapytania.

Próbuję coś

url(r'^?sort=popular/$', 'base.views.main_popular', name='main_popular'), 

Dzięki za pomoc!

Odpowiedz

6

? nie pasuje do "?" wewnątrz adresu URL, ale ma on swoje własne znaczenie, które można tu znaleźć:
Python Regular Expressions Jeśli chcesz dopasować dokładny znak "?" wewnątrz twojego adresu URL, musisz jakoś uciec (ponieważ ma to znaczenie w RegExs), więc możesz chcieć uciec przed nim przez "\" (ukośnik odwrotny) , więc napiszesz \? sort ...

EDIT:
Dobrze więc z tego, co pan powiedział w komentarzach, wydaje się tu jakiś problem, main?sort=popular występuje na wzorzec uRL podczas renderowania szablonu dla /main/ z GET metoda słowniku argument sort=popular, wystarczy napisać funkcję, która rozróżnia GET i POST, w części GET, mają coś takiego jak sort_by = request.GET.get('sort',''), a następnie sortowanie odpowiednio z wartością zmiennej sort_by, byłoby coś takiego jak:

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) 

i puścić? wewnątrz wzorca adresu URL, który jest dodawany, gdy zażądasz strony z argumentem GET.

+0

Próbowałem to zrobić, niestety to nie zadziałało - nie jestem całkiem pewien dlaczego. – deakolt

+0

Czy chcesz też opublikować ten kod? ale tak naprawdę wydaje się tak dziwne, że na początku takiego adresu URL jest znak zapytania (sort = popularna). – SpiXel

+0

Zasadniczo mam jedną stronę z treścią, którą można sortować w oparciu o sortowanie. main? sort = popularny rodzaj oznacza, że ​​nadal jesteś na stronie głównej, a nie na stronie głównej/popularnej/która sugeruje inną stronę. Używałem adresu url (r '^ \? Sort = popular/$', 'base.views.main_popular', name = 'main_popular') – deakolt

7

Nie dopasowujesz ich do wyrażenia regularnego. Elementy po numerze ? nie są częścią adresu URL, są to parametry zapytania, do których można uzyskać dostęp z widoku poprzez request.GET.

+0

Ahh Jestem taki świetny w programowaniu sieciowym, dziękuję - – deakolt

Powiązane problemy