2014-07-20 14 views
5

tôi nghĩ rằng tiêu đề khá rõ ràng. Tôi muốn biết khi nào người dùng nhấp vào nút để chạy một đoạn mã trong một hàm trong views.py của tôi. cho phép nói rằng tôi có html này:Nhận sự kiện nhấp từ nút trong chế độ xem django

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

và tôi muốn để chạy mã này nếu người dùng nhấp vào nó:

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

that's tất cả tôi muốn làm.

EDIT: đây là quan điểm cho rằng tôi có:

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) 

Trả lời

4

Bạn nên tạo chức năng này trong views.py của bạn, bản đồ nó vào url trong urls.py của bạn và thêm xử lý sự kiện bằng JavaScript (JS tinh khiết hoặc sử dụng jQuery như hình dưới đây):

JS (sử dụng jQuery):

$('#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:

def verFactura(request, id_factura): 

    ...  

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

    ... 

Lưu ý rằng nếu bạn đang sử dụng phương pháp POST bạn nên quan tâm đến csrf (yêu cầu giả mạo cross-site) bảo vệ như mô tả HERE

+0

Tôi chỉ chỉnh sửa câu hỏi. Đó là quan điểm mà tôi có bây giờ, tôi chỉ muốn thêm vào trong tuyên bố nếu hành động nhấp chuột. Bạn có nói dễ dàng hơn với ajax và jquery không ?. Cảm ơn – user3799942

+0

Xem câu trả lời được cập nhật. Nếu bạn muốn thực hiện hành động nhấp chuột mà không cần tải lại trang - ajax là lựa chọn tốt. Nhưng tôi thích có các chức năng khác nhau trong 'views.py' để hiển thị trang và xử lý các thao tác như nút bấm –

+0

Tiếng Anh của tôi không tốt lắm nên hãy cho tôi biết nếu tôi hiểu. Trong câu lệnh If tôi nên đặt mã này "nếu request.POST.get ('click', False): (gửi email)" và tôi nên sử dụng mã js bạn đã đề xuất trong mẫu? – user3799942

Các vấn đề liên quan