python - View orders.views.order_create没有返回HttpResponse对象。它返回 None 相反

标签 python django

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/

相关文章:

python - 如何打印带有索引号的列表(python)?

python - CNTK:条件执行

python - 查询python memcached数据

Python--timedelta对象什么时候处理?

python - 使用 Route 53 解析器自动记录 DNS 查询 - Cloudformation

python - 为什么在 python 中动态更改日志级别不起作用

python - 如何为 redis.StrictRedis 使用连接池?

python - 使用 AWS 部署 Django

python - 使用 python 和 wkhtmltopdf 将 HTML 转为 PDF

python - 使用 render_to_string 在 Django 中将 ajax post 渲染为 HTML