Come faccio a passare argomenti facoltativi in Django vista

Ho una funzione in vista come

def  calculate(request , b)

Voglio che questa funzione dovrebbe funzionare anche se b non passa

InformationsquelleAutor tej.tan | 2011-06-27

 

4 Replies
  1. 59

    Potrebbe anche essere necessario aggiornare il vostro URL di spedizione per gestire la richiesta con, o senza, il parametro opzionale.

    url(r'^calculate/?(?P<b>\d+)?/?$', 'calculate', name='calculate'),  
    url(r'^calculate/$', 'calculate', name='calculate'),

    Se si passa b tramite l’URL che colpisce la prima definizione dell’URL. Se non si include il parametro opzionale che colpisce la seconda definizione, ma va nella stessa vista e utilizza il valore predefinito è fornito.

    • Penso che questa è la parte più importante della risposta.
    • È possibile utilizzare entrambe le definizioni in reverse('calculate', ...)?
    • Sì, è possibile fornire sia args e kwargs come attributi passati al metodo inverso.
    • Super-corretto ! In alternativa, dal momento che la definizione di due distinti url è necessario, è possibile specificare il valore predefinito per il parametro mancante nell’url, per mantenere tutte le decisioni in un unico luogo: url(r'^calculate/$', 'calculate', {'b': 3}, name='calculate'),
  2. 7

    Il superamento di un valore di default per il metodo rende parametro opzionale.

    Nel tuo caso si può fare:

    def calculate(request, b=None)
        pass

    Quindi nel modello è possibile utilizzare la condizione per un comportamento differente:

    {% if b %}
        Case A
    {% else %}
        Case B
    {% endif %}

Lascia un commento