2017-08-04 22 views
1

ビューorders.views.order_createはHttpResponseオブジェクトを返しませんでした。代わりにNoneを返しました。ビューorders.views.order_createはHttpResponseオブジェクトを返しませんでした。代わりにNoneを返しました

私はすべてを試しても、このエラーが発生します。問題はURLにあると思いますが、わかりません。 注文チェックアウトのための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フォルダにあります。私がバグを修正するのを助けるために必要ならば、私は親切に他の情報を提供します。

答えて

4

フォームの提出に対応するメソッドがPOSTの場合にのみ、ビューからの応答が返されます。 フォームが表示されるように、メソッドがGETの場合でも応答を返す必要があります。

一つの解決策は次のようになります。

方法は POSTでない場合、または formが有効でない場合は、2番目の復帰がヒットします
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}) 

。 (私はCartが何であるかわからないんだけど、それはGET応答で送信する必要がある場合、私は知らない...)

+0

これは、else文で正しく実行されるはずなので、解決策を教えてもらえますか? –

+0

現在の字下げでは、elseはフォームが有効でない場合です。メソッドが 'POST'でないときではありません。すべての状況で応答を返す必要があります。 –

+0

ああ、本当にインデントされました。私はそれが正しいと思っていますが、とにかく感謝します。 –

1

エラーが不適切なインデントとで

def order_create(request): 
    cart = Cart(request) 
    if request.method == 'POST': 

のようです現時点では、それは、あなたのビューは、次のようにややもまず自分のくぼみをチェックすることが

def order_create(request): 
     cart = Cart(request) 
if request.method == 'POST': 
+0

インデントからエラーが発生しません –

0

編集のようなものだ

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() 

    else: 
     form = OrderCreateForm() 
    return render(request, 'orders/create.html', {'cart': cart, 'form':form}) 
+0

インデントが問題ではありません –

+0

私の友人をもう一度考えてください... – zaidfazil

関連する問題