2012-01-09 59 views
1

ここにはview.pyがあります。 show_checkoutが呼び出され、return HttpResponseRedirect('/receipt/')まで実行されますが、なんらかの理由でreceiptビューが起動されていません。 print文はどれも機能していない。ここでDjangoで表示関数が呼び出されない

from django.shortcuts import render_to_response 
from django.template import RequestContext 
from django.core import urlresolvers 
from django.http import HttpResponseRedirect 

from ecomstore.checkout.forms import CheckoutForm 
from ecomstore.checkout.models import Order, OrderItem 
from ecomstore.checkout import checkout 
from ecomstore.cart import cart 
from django.core.context_processors import csrf 

# Create your views here. 
def show_checkout(request, template_name='checkout/checkout.html'): 
    c = {} 
    c.update(csrf(request)) 
    if cart.is_empty(request): 
     cart_url = urlresolvers.reverse('show_cart') 
     return HttpResponseRedirect(cart_url) 
    if request.method == 'POST': 
     postdata = request.POST.copy() 
     form = CheckoutForm(postdata) 
     if form.is_valid(): 
      response = checkout.process(request) 
      order_number = response.get('order_number',0) 
      print 'this is the order number: ' + str(order_number) 
      error_message = response.get('message','') 
      if order_number: 
       request.session['order_number'] = order_number 
#    receipt_url = urlresolvers.reverse('checkout_receipt') 
       print request.session['order_number'] 
       return HttpResponseRedirect('/receipt/') 

     else: 
      error_message = 'Correct the errors below' 
    else: 
     form = CheckoutForm() 
    page_title = 'Checkout' 
    return render_to_response(template_name, locals(), context_instance= RequestContext(request)) 

##Currently this doesn't seem to be running 
def receipt(request, template_name='checkout/receipt.html'): 
    order_number = request.session.get('order_number','') 
    print 'this is receipt order number: ' + str(order_number) 
    if order_number: 
     print 'in order_number' 
     order = Order.objects.filter(id=order_number)[0] 
     order_items = OrderItem.objects.filter(order=order) 
     del request.session['order_number'] 
    else: 
     print 'not in order number' 
     cart_url = urlresolvers.reverse('show_cart') 
     return HttpResponseRedirect(cart_url) 
    return render_to_response(template_name, locals(), context_instance=RequestContext(request)) 

はcheckout.urlsです:

from django.conf.urls.defaults import * 
from ecomstore import settings 

urlpatterns = patterns('ecomstore.checkout.views', 
         (r'^$','show_checkout',{'template_name':'checkout/checkout.html','SSL':settings.ENABLE_SSL},'checkout'), 
         (r'^receipt/$','receipt',{'template_name':'checkout/receipt.html','SSL':settings.ENABLE_SSL},'checkout_receipt'), 
) 

とurls.py:

urlpatterns = patterns('', 

         # Examples: 
    # url(r'^$', 'ecomstore.views.home', name='home'), 
    # url(r'^ecomstore/', include('ecomstore.foo.urls')), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
         url(r'^admin/', include(admin.site.urls)), 
         (r'^', include('catalog.urls')), 
         (r'^cart/$', include('cart.urls')), 
         (r'^checkout/$', include('checkout.urls')), 
         (r'^receipt/$', include('checkout.urls')), 

) 

重要:また、それが現在に転送されていますlocalhost/cart

答えて

2

あなたのメインのurls.pyでは、正規表現で "$"を使用しないでください。それは私のためにそれを固定したようだ。

+0

それは意味があります。どうしてここで 'reverse()'を使うことができないのか分かりますか? – locoboy

+0

エントリに名前が付いていれば、できるはずです。 (あなたが投稿したコードの私のテストコピー上でReverseは動作します) – Naddiseo

1

私の推測では、領収書/領収書

+0

ことを試してみましたが、それはページが見つかりません – locoboy

+1

あなたはこれを追加してみてくださいと言う: 'django.shortcutsから働いていない、'リターンリダイレクト(「checkout_receipt」) ' – Naddiseo

+0

HMを使用し、HttpRedirectを返す代わりred​​irect'その後、インポートします。私はそれが私がそのライブラリを持っていないことと関係があると思います... ImportError:環境変数DJANGO_SETTINGS_MODULEが定義されていないため、設定をインポートできません。 – locoboy

関連する問題