将会话数据传递给模板而无需自定义视图

时间:2012-10-05 07:55:32

标签: python django templates registration

我正在使用django-registration添加订阅。现在,我正在尝试在registration_complete页面上创建一个Paypal表单。

我创建了一个会话变量,如下所示:

def user_created(sender, user, request, **kwargs):
        form = RegistrationFormEx(data=request.POST)
        new_user = User.objects.get(username=request.POST['username'])
        digest=hmac.new(str(request.POST['username'])+str(request.POST['password1']), str(request.POST['password1']),hashlib.sha1).hexdigest()
        new_profile = UserProfile(user=new_user,api_key=digest)
        new_profile.save()
        #now add other fields including password hash as well

        uid = new_profile.id
        #Add username to session to pass it via Paypal later
        request.session['username']=request.POST['username']
        merchant_profile = MerchantProfile(user_id=uid,
            create_time=datetime.datetime.now(),
            modified_time=datetime.datetime.now(),
            payment_card_id=uid,
            current_state=1,
            name=request.POST['name'],
             )
        merchant_profile.save()

        return new_user

    user_registered.connect(user_created)

我的Paypal表单模板如下:

{% extends "base.html" %}
{% load i18n %}

{% block content %}
<p>
    {% trans "You are now registered. Activation email sent." %}

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="sumit_1349250468_per@sample.com">
    <input type="hidden" name="item_name" value="registration charge {{ request.session.username }}">
    <input type="hidden" name="item_number" value="1">
    <input type="hidden" name="amount" value="9.00">
    <input type="hidden" name="no_shipping" value="0">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="lc" value="AU">
    <input type="hidden" name="bn" value="PP-BuyNowBF">
    <input type="image" src="https://www.paypal.com/en_AU/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
    <img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">
    <input type="hidden" name="return" value="http://url/payment_result?response=success">
    <input type="hidden" name="cancel_return" value="http://url/sorry">

</form>

</p>
{% endblock %}

如果不更改任何视图,如何在此模板中打印request.session.username的值?

1 个答案:

答案 0 :(得分:2)

在settings.py中,TEMPLATE_CONTEXT_PROCESSORS应包含django.core.context_processors.request - 这会使request变量可用于您的模板。

虽然有一句警告:当用户激活他的电子邮件并在返回后登录时,会话变量可能已经改变。