Sean
Sean

Reputation: 51

Not returning html page for viewing - django

error message --> The view orders.views.charge didn't return an HttpResponse object. It returned None instead. any reason why my charge.html isn't working?

views,py

import time 
import stripe

from django.conf import settings
from django.shortcuts import render
from django.urls import reverse

def charge(request):
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=500,
            currency='eur',
            description='A Django charge',
            source=request.POST['stripeToken']
            )
        template = "orders/charge.html"
        return render(request, template)

charge.html

{% extends "fuisce/base.html" %}


{% block content %}

  <div class="container mt-5 text-center">
    <h2 class="text-center">Thanks, you for your Orders</h2>
    <a href="/my-orders" class="btn btn-success">My Orders</a>
  </div>

{% endblock %}

urls.py

from django.urls import path
from . import views
from orders import views as order_views
from users import views as user_views

urlpatterns = [
    path('checkout/', order_views.checkout, name='checkout'),
    path('charge/', order_views.charge, name='charge'),
    path('orders/', order_views.orders, name='user_orders'),
    path('add_user_address/', user_views.add_user_address, name='add_user_address'),
]

Upvotes: 0

Views: 491

Answers (1)

MohitC
MohitC

Reputation: 4821

Bring the returning code from your view outside the if condition if you want it to return on GET requests.

def charge(request):
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=500,
            currency='eur',
            description='A Django charge',
            source=request.POST['stripeToken']
            )
    template = "orders/charge.html"
    return render(request, template)

Upvotes: 1

Related Questions