2012-01-09 47 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