Django 1.11 TypeError-Kontext muss eher ein Dict als ein Kontext sein
Habe gerade das Sentry Fehler TypeError context must be a dict rather than Context.
auf einem meiner Formulare. Ich weiß, es hat etwas zu tun mit Django 1.11, aber ich bin mir nicht sicher, was zu verändern ist, um es zu beheben.
Betreffende Zeile
message = get_template('email_forms/direct_donation_form_email.html').render(Context(ctx))
Gesamte Ansicht
def donation_application(request):
if request.method == 'POST':
form = DirectDonationForm(data=request.POST)
if form.is_valid():
stripe.api_key = settings.STRIPE_SECRET_KEY
name = request.POST.get('name', '')
address = request.POST.get('address', '')
city = request.POST.get('city', '')
state = request.POST.get('state', '')
zip = request.POST.get('zip', '')
phone_number = request.POST.get('phone_number', '')
support = request.POST.get('support', '')
agree = request.POST.get('agree', '')
email_address = request.POST.get('email_address', '')
number = request.POST.get('number', '')
cvc = request.POST.get('cvc', '')
exp = request.POST.get('exp', '')
# token = form.cleaned_data['stripe_token'],
# exp_m = int(request.POST.get('exp_month', ''))
# exp_y = int(request.POST.get('exp_year', ''))
exp_month = exp[0:2]
exp_year = exp[5:9]
subject = 'New Donation'
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = ['deniselarkins@/////\\\\\.com',
'charles@/////\\\\\.net',
'marcmunic@/////\\\\\.com',
]
token = stripe.Token.create(
card={
'number': number,
'exp_month': exp_month,
'exp_year': exp_year,
'cvc': cvc
},
)
customer = stripe.Customer.create(
email=email_address,
source=token,
)
total_support = decimal.Decimal(support) / 100
total_charge = decimal.Decimal(int(support)) / 100
# Charge the user's card:
charge = stripe.Charge.create(
amount=total_charge,
currency='usd',
description='Donation',
customer=customer.id
)
ctx = {
'name': name,
'address': address,
'city': city,
'state': state,
'zip': zip,
'phone_number': phone_number,
'email_address': email_address,
'agree': agree,
'charge': charge,
'customer': customer,
'total_support': total_support,
'total_charge': total_charge
}
message = get_template('email_forms/direct_donation_form_email.html').render(Context(ctx))
msg = EmailMessage(subject, message, from_email=from_email, to=recipient_list)
msg.content_subtype = 'html'
msg.send(fail_silently=True)
return redirect(
'/contribute/donation-support-thank-you/?name=' + name +
'&address=' + address +
'&state=' + state +
'&city=' + city +
'&zip=' + zip +
'&phone_number=' + phone_number +
'&email_address=' + email_address +
'&total_support=' + str(total_support) +
'&total_charge=' + str(total_charge)
)
context = {
'title': 'Donation Pledge',
}
return render(request, 'contribute/_donation-application.html', context)
Kommentar zu dem Problem
InformationsquelleAutor der Frage Studio Rooster | 2017-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Django 1.8+, die Vorlage
render
Methode nimmt ein Wörterbuch für diecontext
parameter. Unterstützung für das bestehen einerContext
Instanz ist veraltet, und gibt ein Fehler in Django 1.10+.In Ihrem Fall, verwenden Sie einfach einen regelmäßigen
dict
statt einerContext
Beispiel:Können Sie es vorziehen, verwenden Sie die
render_to_string
Verknüpfung:InformationsquelleAutor der Antwort Alasdair