Skip to main content
 首页 » 编程设计

python之View orders.views.order_create 没有返回 HttpResponse 对象。它返回 None 而不是

2025年05月04日22pengyingh

View orders.views.order_create 没有返回 HttpResponse 对象。它返回 None。

我尝试了所有方法,但仍然出现此错误我认为问题出在网址上,但我不确定。 这是订单结帐的 views.py。 当我点击结帐时出现错误,其他一切正常,只有结帐出错。

from django.shortcuts import render 
from django.template import loader 
from .models import OrderItem 
from .forms import OrderCreateForm 
from cart.cart import Cart 
 
def order_create(request): 
    cart = Cart(request) 
 
    if request.method == 'POST': 
        form = OrderCreateForm(request.POST) 
        if form.is_valid(): 
            order = form.save() 
            for item in cart:  
                OrderItem.objects.create(order=order,product=item['product'],price=item['price'],quantity=item['quantity']) 
 
                cart.clear() 
                return render(request, 'orders/created.html', {'order': order}) 
 
    else: 
        form = OrderCreateForm() 
    return render(request, 'orders/create.html', {'cart': cart, 'form':form}) 

基础 urls.py

from django.conf.urls import url, include 
 
from . import views 
 
urlpatterns = [ 
    url(r'^cart/', include('cart.urls', namespace='cart')), 
    url(r'^orders/', include('orders.urls', namespace='orders')), 
    url(r'^$', views.index, name='index'), 
    url(r'^(?P<product_id>[0-9a-f-]+)/$', views.detail, name="detail"), 
] 

和订单应用 urls.py

from django.conf.urls import url 
from . import views 
 
urlpatterns = [ 
    url(r'^create/$', views.order_create, name='order_create'), 
] 

localhost 中的 url 应该是 127.0.0.1:8000/orders/create create.html 和 created.html 位于市场文件夹中的模板文件夹中。如果需要帮助我修复错误,我会很乐意提供任何其他信息。

请您参考如下方法:

您的 View 仅在方法为 POST 的情况下返回响应,这将对应于表单提交。 您也需要在方法为 GET 时返回响应,以显示表单。

一个解决方案可能是:

def order_create(request): 
    cart = Cart(request) 
    form = OrderCreateForm() 
 
    if request.method == 'POST': 
        form = OrderCreateForm(request.POST) 
        if form.is_valid(): 
            order = form.save() 
            for item in cart: 
                OrderItem.objects.create( 
                    order=order,product=item['product'], 
                    price=item['price'], 
                    quantity=item['quantity']) 
 
            cart.clear() 
            return render(request, 'orders/created.html', {'order': order}) 
 
    return render(request, 'orders/create.html', {'cart': cart, 'form':form}) 

如果方法不是 POST,或者如果 form 无效,则第二个返回将被命中。 (我不确定 Cart 是什么,所以我不知道它是否应该在 GET 响应中发送...)