2013-03-11 13 views
19

Sto provando a scrivere un'applicazione Django e sono bloccato su come posso chiamare una funzione di visualizzazione quando si fa clic su un pulsante.come chiamare una funzione django sul pulsante clic

Nel mio modello, ho un pulsante di collegamento come sotto quando si fa clic su una pagina Web diversa.

<a target="_blank" class="btn btn-info pull-right" href="{{ column_3_item.link_for_item }}">Check It Out</a> 

Quando il pulsante viene premuto, voglio chiamare una funzione di visualizzazione Django anche (insieme a ri-diretto ad un sito web di destinazione). La funzione di visualizzazione consiste nell'incrementare il valore nel database che memorizza il numero di volte in cui si fa clic sul pulsante.

Qualcuno potrebbe aiutarmi come posso ottenere questo.

Edit: -

dispiace per la confusione. il column_3_item.link_for_item è un collegamento a un sito Web esterno (ad esempio: www.google.com). In questo momento quando viene cliccato quel pulsante, si apre una nuova finestra che porta a google sito web. quello che mi piacerebbe fare è chiamare una funzione di visualizzazione di django anche quando si fa clic sul pulsante che aggiorna il database senza aggiornare la pagina.

Grazie

+1

Non capisco la tua domanda. Il tuo codice chiama la funzione di visualizzazione su qualunque cosa 'column_3_item.link_for_item' sia mappata nel tuo urlconf. –

+0

aggiungendo al commento di Daniel: se è necessario fare clic su -> "in tempo reale" aggiornare il couter, senza aggiornare la pagina, potrebbe essere necessario riscrivere la domanda. Se hai una vista che punta a quel link, hai già quello che ti serve –

+0

scusa per la confusione. il 'column_3_item.link_for_item' è un collegamento a un sito web esterno (esempio: - www.google.com). In questo momento quando viene cliccato quel pulsante, si apre una nuova finestra che porta a google sito web. quello che mi piacerebbe fare è chiamare una funzione di visualizzazione di django anche quando si fa clic sul pulsante che aggiorna il database senza aggiornare la pagina. – Dev

risposta

23

ecco un approccio minimalista puro-javascript. Io uso JQuery ma puoi usare qualsiasi libreria (or even no libraries at all).

<html> 
    <head> 
     <title>An example</title> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
     <script> 
      function call_counter(url, pk) { 
       window.open(url); 
       $.get('YOUR_VIEW_HERE/'+pk+'/', function (data) { 
        alert("counter updated!"); 
       }); 
      } 
     </script> 
    </head> 
    <body> 
     <button onclick="call_counter('http://www.google.com', 12345);"> 
      I update object 12345 
     </button> 
     <button onclick="call_counter('http://www.yahoo.com', 999);"> 
      I update object 999 
     </button> 
    </body> 
</html> 

approccio alternativo

Invece di mettere il codice JavaScript, è possibile modificare il vostro link in questo modo:

<a target="_blank" 
    class="btn btn-info pull-right" 
    href="{% url YOUR_VIEW column_3_item.pk %}/?next={{column_3_item.link_for_item|urlencode:''}}"> 
    Check It Out 
</a> 

e nel tuo views.py:

def YOUR_VIEW_DEF(request, pk): 
    YOUR_OBJECT.objects.filter(pk=pk).update(views=F('views')+1) 
    return HttpResponseRedirect(request.GET.get('next'))) 
+12

se downvoting per favore spiega perché in un commento così posso migliorare la mia risposta – furins

+0

Grazie mille. Ho usato l'approccio alternativo e ha funzionato perfettamente come previsto. – Dev

Problemi correlati