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'),
]
本地主机中的 URL 应为 127.0.0.1:8000/orders/create create.html 和created.html 位于market 文件夹的templates 文件夹中。如果需要帮助我修复错误,我愿意提供任何其他信息。
最佳答案
您的 View 仅在方法为 POST
的情况下返回响应,该方法对应于表单提交。
当 method 为 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
响应发送...)
关于python - View orders.views.order_create没有返回HttpResponse对象。它返回 None 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508855/