2016-06-17 6 views
1

Ich habe einen Warenkorb von View-Methode gerendert A, möchte ich die Details in den Warenkorb, um die Pesapal API, über eine pesapal package eingereicht werden. Ich benutze die gleiche Methode wie die sandbox app, PaymentView. Der Warenkorb hat eine Checkout-Taste, die die Daten an die API senden soll. Die Sandbox-Methode simlpy ruft die Daten als ein Wörterbuch (order_info) ab und leitet sie an eine URL (get_payment_url) weiter, die dann die API einspeist. Wenn ich die Vorlage öffne, bestimmt der iframe der API, dass ich die im Wörterbuch angegebene Menge ziehe. Wie kann ich Daten über den Warenkorb übermitteln?Django Zahlungen Integration

## Sandbox method submitting data to the api 
class PaymentView(TemplateView, PaymentRequestMixin): 
    template_name = 'payment/payment.html' 
    # how the sandbox app submits data to api: 

    def get_context_data(self, **kwargs): 
     ctx = super(PaymentView, self).get_context_data(**kwargs) 

     order_info = { 
     'amount': '1000', 
     'description': 'Payment for Stuff', 
     'reference': 2, 
     'email': '[email protected]' 
    } 

    ctx['pesapal_url'] = self.get_payment_url(**order_info) 
    return ctx 

## view method A: 
def show_cart(request, template_name="payment/cart.html"): 
    if request.method == 'POST': 
     postdata = request.POST.copy() 
     if postdata['submit'] == 'Remove': 
      cart.remove_from_cart(request) 
     if postdata['submit'] == 'Update': 
      cart.update_cart(request) 
     if postdata['submit'] == 'Checkout': 
      # submission to api should occur here 
    cart_items = cart.get_cart_items(request) 
    cart_subtotal = cart.cart_subtotal(request) 
    return render_to_response(template_name, locals(), context_instance=RequestContext(request)) 

# my url 
urlpatterns = patterns('cart.views', 
(r'^$', 'show_cart', { 'template_name': 'payment/cart.html' }, 'show_cart'), 
) 

Antwort

0

in der Dokumentation der Suche und die source code, scheint es keine Methode, um alle Daten zu setzen. Hast du ein Beispiel, wo das gemacht wird?

+0

Eigentlich gibt es, beziehen Sie sich auf den Datensatz an api gesendet werden? @Martin check out die Methode 'generate_payload', die eine XML-Payload als Wörterbuch [hier] generiert (https://github.com/odero/django-pesapal/blob/master/django_pesapal/views.py) –

+0

Die Daten in meinem App ist nur nach einer Formularübergabe verfügbar, daher habe ich eine neue update_view-Methode erstellt, die es einem Benutzer ermöglicht, seine Optionen noch einmal zu bearbeiten. Auf der gleichen Vorlage gibt es eine Registerkarte Zahlungen mit dem Warenkorb und da es eine Update-Ansicht ist, sind die Daten des Artikels im Voraus ausgefüllt, so dass die Einreichung einfacher ist @Martin Hallén –

1

Sie würden schnell davon kommen, indem Sie django Ihre Daten auf die Vorlage oder in diesem Fall Ihren Warenkorb analysieren lassen. Dies kann geschehen, indem Sie Ihre Methode die gewünschten Daten zurückgeben lassen. Etwas wie:

return render(request, 'yourpage.html', 
       {'yourvariable':yourvariable}, context_instance=RequestContext(request)) 

Dann bekommen Sie einfach Ihren Wert in der Vorlage (Warenkorb in Ihrem Fall) wie:

{{yourvariable}} 

Dann lassen Sie die api den Rest.

+0

aber wo würde ich die API-Anruf und füttern die Daten in den Warenkorb nach Ich gebe die Daten zurück? –

+0

Hi ja das hat total funktioniert !! Ich analysierte die Daten über eine neue update_view-Methode, die das Senden an die API wirklich reibungslos machte. Das ist was passiert-- Ich habe die show_cart-Methode so geändert, dass sie auf einer anderen Registerkarte in der gleichen Vorlage gerendert wird, so dass die Daten übermittelt werden, nachdem die Daten übermittelt wurden. Der Benutzer wird dann auf die Registerkarte "Warenkorb" mit der Tabelle vorbefüllt und weitergeleitet bereit für die Einreichung –