urls example documentacion based python django django-views

python - example - render django



El contexto Django 1.11 TypeError debe ser un dict en lugar de un contexto (1)

Acaba de recibir el error de error de Sentry El TypeError context must be a dict rather than Context. en uno de mis formularios. Sé que tiene algo que ver con Django 1.11, pero no estoy seguro de qué cambiar para solucionarlo.

Línea ofensiva

message = get_template(''email_forms/direct_donation_form_email.html'').render(Context(ctx))

Vista completa

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)


En Django 1.8+ , el método de render la plantilla toma un diccionario para el parámetro de context . El soporte para pasar una instancia de Context está en desuso , y da un error en Django 1.10+.

En su caso, solo use un dict regular en lugar de una instancia de Context :

message = get_template(''email_forms/direct_donation_form_email.html'').render(ctx)

Es posible que prefieras usar el render_to_string directo render_to_string :

from django.template.loader import render_to_string message = render_to_string(''email_forms/direct_donation_form_email.html'', ctx)