2012-01-09 38 views
1

這是view.py. show_checkout被調用並一直運行到return HttpResponseRedirect('/receipt/'),但由於某種原因,receipt視圖未被解僱。沒有打印報表的工作是:未在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 2012-01-09 05:32:43

+0

只要條目具有名稱,您應該可以。 (反向工作在我發佈的代碼的測試副本上) – Naddiseo 2012-01-10 01:50:30

1

我的猜測是你的意思是/收據/收據

+0

試過了,它說沒有找到頁面 – locoboy 2012-01-09 03:54:37

+1

您可以嘗試添加:從django.shortcuts導入重定向然後而不是返回HttpRedirect,使用'return redirect('checkout_receipt')' – Naddiseo 2012-01-09 03:56:12

+0

hm,不起作用。我認爲它有什麼關係,我沒有那個庫... ImportError:無法導入設置,因爲環境變量DJANGO_SETTINGS_MODULE未定義。 – locoboy 2012-01-09 04:15:01