自定义Django-PayPal视图

时间:2012-03-19 10:04:29

标签: django paypal django-paypal

我使用django paypal允许用户在我的网站上进行付款,但我有一些疑问。

目前我的工作方式是我有一个名为profile.html的模板。当用户单击“单击以获取更多订阅选项”按钮时,他将被重定向到subscriptions.html模板,该模板显示订阅表和paypal按钮。单击该按钮时,用户将被重定向到另一个名为paypal.html的模板,该模板显示另一个来自django-paypal的forms.py

的贝宝按钮。

我的问题是如何修改paypal视图,以便我可以取消paypal.html并在用户点击subscription.html中的paypal按钮时将用户直接指向实际的paypal网站?

我希望我对这个问题的描述足够清楚。

在我的views.py中:

def paypal(request):
    paypal_dict = {"business":settings.PAYPAL_RECEIVER_EMAIL,"amount": "1.00","item_name": "Milk" ,"invoice": "12345678", "notify_url": "%s%s" % (settings.SITE_NAME, reverse('paypal-ipn')),"return_url": "http://rosebud.mosuma.net",}
    # Create the instance.
    form = PayPalPaymentsForm(initial=paypal_dict)
    context = {"form": form.sandbox()}
    return render_to_response("paypal.html", context)

在我的个人资料中:

....
<INPUT TYPE="submit" Value="Click to find out subscription plans" name="subscription" onClick="/subscribe/>
在我的subscription.html中

<form method="post" action="paypal/">
<select name="subscription_input" id="id_subscription" style = "float: center">
<option>Monthly</option>
<option>Yearly</option>
</select></br></br>

{{ form }}
</form>

在我的urls.py中:

url(r'^paypal/$', 'r2.views.paypal', name='paypal'),
url(r'^profile/paypal/$', 'r2.views.paypal', name='paypal'),

1 个答案:

答案 0 :(得分:0)

如果您希望用户在单击subscription.html中的PayPal按钮后立即直接访问PayPal网站,则必须将PayPal表单呈现在subscription.html中,而不是paypal.html中。此外,您需要在forms.py中将PayPalPaymentsForm子类化,以覆盖默认的PayPal图像“立即购买”,因为您希望自己的按钮首先起作用。


forms.py

from paypal.standard.forms import PayPalPaymentsForm
from django.utils.html import format_html

class ExtPayPalPaymentsForm(PayPalPaymentsForm):
    def render(self):
        form_open  = u'''<form action="%s" id="PayPalForm" method="post">''' % (self.get_endpoint())
        form_close = u'</form>'
        # format html as you need
        submit_elm = u'''<input type="submit" class="btn btn-success my-custom-class">'''
        return format_html(form_open+self.as_p()+submit_elm+form_close)

views.py

from .forms import ExtPayPalPaymentsForm
def paypal(request):
    paypal_dict = {"business":settings.PAYPAL_RECEIVER_EMAIL,"amount": "1.00","item_name": "Milk" ,"invoice": "12345678", "notify_url": "%s%s" % (settings.SITE_NAME, reverse('paypal-ipn')),"return_url": "http://rosebud.mosuma.net",}
    # Create the instance.
    form = ExtPayPalPaymentsForm(initial=paypal_dict)
    context = {"form": form.sandbox()}
    return render_to_response("subscription.html", context)