2014-07-20 11 views
5

Sanırım başlık oldukça açık. Kullanıcıların, benim view.py sayfamdaki bir fonksiyonda bir kod parçası çalıştırmak için düğmeyi tıkladığında bilmek istiyorum.Click olayı django görünümünde bir düğmeden alın

<div> 
    <input type="button" name="_mail" value="Enviar Mail"> 
</div> 

ve kullanıcı tıkladığında eğer ben bu kodu çalıştırmak istiyorum: yapmak istediğim hepsi bu

send_templated_mail(template_name='receipt', 
        from_email='[email protected]', 
        recipient_list=[request.user.email], 
        context=extra_context) 

ben bu html söylüyorlar sağlar.

DÜZENLEME:

def verFactura(request, id_factura): 
    fact = Factura.objects.get(pk = id_factura) 
    cliente = Cliente.objects.get(factura = fact) 
    template = 'verfacturas.html' 
    iva = fact.importe_sin_iva * 0.21 
    total = fact.importe_sin_iva + iva 

    extra_context = dict() 
    extra_context['fact'] = fact 
    extra_context['cliente'] = cliente 
    extra_context['iva'] = iva 
    extra_context['total'] = total 


    if (here i want to catch the click event): 
     send_templated_mail(template_name='receipt', 
        from_email='[email protected]', 
        recipient_list =['[email protected]'], 
        context=extra_context) 

     return HttpResponseRedirect('../facturas') 



return render(request,template, extra_context) 

cevap

4

Sen JavaScript (saf JS veya, senin views.py bu işlevi oluşturmak için urls.py yılında url eşlemek ve kullanan olay işleyicisi eklemek gerekir: Bu sahip olduğum görünümü olduğu) aşağıda gösterildiği gibi jQuery kullanılarak:

JS() jQuery kullanılarak:

$('#buttonId').click(function() {  
    $.ajax({ 
     url: your_url, 
     method: 'POST', // or another (GET), whatever you need 
     data: { 
      name: value, // data you need to pass to your function 
      click: true 
     } 
     success: function (data) {   
      // success callback 
      // you can process data returned by function from views.py 
     } 
    }); 
}); 

HTML:

<div> 
    <input type="button" id="buttonId" name="_mail" value="Enviar Mail"> 
</div> 

Python: Eğer POST yöntemi kullanmak için gidiyoruz eğer

+0

HERE açıklandığı gibi koruma konusunda csrf (xsrf) bakım gerektiğini

def verFactura(request, id_factura): ... if request.POST.get('click', False): # check if called by click # send mail etc. ... 

Not Sadece soruyu düzenliyorum. Şimdi sahip olduğum görünüm, sadece if deyiminde tıklama eylemini eklemek istiyorum. Ajax ve jquery ile daha kolay olduğunu mu söylüyorsunuz? Teşekkürler – user3799942

+0

Güncelleme yanıtına bakın. Sayfa yeniden yüklemesi olmadan tıklama eylemi gerçekleştirmek istiyorsanız - ajax iyi bir seçimdir. Ama ben Sayfayı oluşturmak için view.py' içinde farklı işlevlere sahip olmayı tercih ediyorum ve bu eylemi işlemek için bu butona tıklayın. –

+0

İngilizcem çok iyi değil, anladığım halde görmeme izin verin. If deyiminde bu kodu koymalıyım "request.POST.get ('click', False): (e-posta gönder") ve şablonda önerdiğiniz js kodunu kullanmalı mıyım? – user3799942