2012-08-22 10 views
6

Sto provando a fare un po 'di corrispondenza con l'URL di Django.URL Django, utilizzando un? nell'URL

Voglio alcuni indirizzi dove ho http://mysite.com/base?sort=type1/, http://mysite.com/base?sort=type2/, ecc

io non riesco a capire come a URL abbinare queste espressioni: Sono molto nuovo a Django e mai utilizzato Reg Ex prima.

quello che ho per urls.py nella mia "base" applicazione è:

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

io non riesco a capire cosa mettere per abbinare i miei URL con punti interrogativi.

sto cercando qualcosa di simile

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

Grazie per l'aiuto!

risposta

6

? non corrisponderà a "?" all'interno dell'URL, invece ha un suo significato che puoi cercare qui:
Python Regular Expressions Se vuoi abbinare il carattere esatto di "?" all'interno del tuo url, devi in ​​qualche modo scappare (perché ha un significato in RegExs) quindi potresti evaderlo con una "\" (una barra rovesciata) così dovresti scrivere \? sort ....

EDIT:
Va bene così con quello che hai detto nei commenti, sembra qui è il tuo problema, main?sort=popular si verifica sul vostro modello URL quando si sta rendendo il modello per /main/ con il dizionario argomento GET metodo sort=popular, basta scrivere una funzione che distingue tra GET e POST, nella parte GET, avere come sort_by = request.GET.get('sort','') e quindi ordinare di conseguenza con il valore della variabile sort_by, sarebbe come tipo:

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) 

e lasciarsi andare? all'interno del pattern url, che viene aggiunto quando si richiede una pagina con un argomento GET.

+0

Ho provato a farlo, sfortunatamente non ha funzionato molto - non sono del tutto sicuro del perché. – deakolt

+0

potresti voler postare anche quel codice? ma davvero, sembra così strano avere un punto interrogativo all'inizio di un tale url (sort = popular) – SpiXel

+0

Beh, in sostanza ho una pagina web, con contenuti che possono essere ordinati in base all'ordinamento. main? sort = tipo popolare implica che sei ancora nella pagina principale, vs main/popular/che tipo implica una pagina diversa. Stavo usando url (r '^ \? Sort = popular/$', 'base.views.main_popular', name = 'main_popular') – deakolt

7

Non si abbina questi contro la regex. Gli elementi dopo lo ? non fanno parte dell'URL, sono parametri di query a cui è possibile accedere dalla propria vista tramite request.GET.

+0

01hAh, sono un tale nocciolo della programmazione web, grazie-- – deakolt