2011-07-05 19 views
12

Questo è semplice ed evidente ma non riesco a farlo bene:Django modelli di URL con 2 parametri

Ho la seguente funzione di visualizzazione dichiarata in urls.py

(r'^v1/(\d+)$', r'custom1.views.v1'), 

originariamente stavo passando un parametro singolo per la funzione vista v1. Voglio modificarlo per passare 2 parametri. Come posso dichiarare la voce in urls.py per prendere due parametri?

risposta

11

si Supponendo che vuole l'URL a guardare come v1/17/18 e ottenere i due parametri 17 e 18, si può semplicemente dichiarare il modello come:

(r'^v1/(\d+)/(\d+)$', r'custom1.views.v1'), 

Assicurarsi v1 accetta due argomenti oltre al oggetto di richiesta:

def v1 (request, a, b): 
    # for URL 'v1/17/18', a == '17' and b == '18'. 
    pass 

il first example nel documentation about the URL dispatcher contiene diversi modelli, l'ultimo dei quali prendono 2 e 3 parametri.

9

Da qualche parte lungo la linea ho preso l'abitudine di nominarli direttamente nella regex, anche se onestamente non so se faccia la differenza.

#urls: 
(r'^v1/(?P<variable_a>(\d+))/(?P<variable_b>(\d+))/$', r'custom1.views.v1') 

#views: 
def v1(request, variable_a, variable_b): 
    pass 

Inoltre, è molto Django per terminare l'URL con una barra finale - Django Design Philosophy, FYI