2013-03-08 5 views
0

У меня есть функция,Как справиться с NoReverseMatch?

def show_checkout(request,id): 
    if order.is_empty(request): 
     cart_url = urlresolvers.reverse('order_index') 
     return HttpResponseRedirect(cart_url) 
    if request.method == 'POST': 
     resto = Restaurant.objects.get(pk=id) 
     form = forms.CheckoutForm(request.POST,instance=restaurant) 
     if form.is_valid(): 
      order_created = create_order(request,resto) 
      ..... 
    return render(request,'checkout/checkout.html',context) 

в следующем зрения я пытаюсь отправить форму,

def show_order(request): 
    if request.method == 'POST': 
     postdata = request.POST.copy() 
     if postdata['submit'] == 'checkout': 
      checkout_url = checkout.get_checkout_url(request) 
      return HttpResponseRedirect(checkout_url) 

выше мнение называет эту точку зрения в checkout.py

def get_checkout_url(request): 
    return urlresolvers.reverse('checkout') 

в urls.py url(r'^checkout/(?P<id>\w+)$',show_checkout,name="checkout"),

после всего этого я получаю ошибку, Reverse for 'checkout' with arguments '()' and keyword arguments '{}' not found. Я думал, что оказался на правильном пути, я думаю, что я не был.

редактировать в я сделать

def show_order(request,id): 
    resto = Restaurant.objects.get(pk=id) 
    ... 
     if postdata['submit'] == 'checkout': 
#   checkout_url = checkout.get_checkout_url(request) 
      return HttpResponseRedirect(urlresolvers.reverse('checkout',kwargs={'id':resto})) 

в URLs я делать url(r'^your_order/(?P<id>\w+)$',show_order,name="order_index"), вызывает ошибку page not found

полный urls.py

from .views import show_item,show_checkout,show_order,get_category,homepage,reciept 
from f4l import settings 
from django.conf.urls.defaults import patterns, include, url 


urlpatterns = patterns('', 
    url(r'^$',homepage,name="homepage"), 
    url(r'^menu/(\d+)$',get_category, name="f4l_menu"), 
    url(r'^your_order/(?P<id>\w+)$',show_order,name="order_index"), 
    url(r'^item/(?P<id>\w+)/$',show_item, name="item_order"), 
    url(r'^checkout/(?P<id>\w+)$',show_checkout,name="checkout"), 
    url(r'^reciept/$',reciept,name="checkout_reciept"), 

ответ

0

Вам не нужна эта функция get_checkout_url и необходимо передать аргумент id для URL-адреса.

Вместо return HttpResponseRedirect(checkout_url) попробовать это:

HttpResponseRedirect(urlresolvers.reverse('checkout',kwargs={'id':your_id})) 
+0

его та же ошибка ma friend .. –

+0

Я забыл одну вещь, и я исправляю исправление ответа –

+0

@SuziemacTani вы пробовали это снова? –

0
from django.conf.urls.defaults import patterns, include, url 

urlpatterns = patterns('live.views', 
    url(r'^$', 'homepage', name="homepage"), 
    url(r'^menu/(\d+)/$', 'get_category', name="f4l_menu"), 
    url(r'^your_order/(?P<id>\d+)/$', 'show_order', name="order_index"), 
    url(r'^item/(?P<id>\d+)/$', 'show_item', name="item_order"), 
    url(r'^checkout/(?P<id>\d+)/$', 'show_checkout', name="checkout"), 
    url(r'^reciept/$', 'reciept', name="checkout_reciept"), 


def show_order(request,id): 
    resto = Restaurant.objects.get(pk=id) 
    ... 
     if postdata['submit'] == 'checkout': 
      return HttpResponseRedirect(reverse('live:order_index',kwargs={ 
       'id':id})) 
+0

спасибо, но это все еще поднимает страницу не найдена, ma urls 'url (r '^ your_order/(? P \ w +) $', show_order, name =" order_index "),' –

+0

no change catherine, –

+0

Я просто сделал это .. –

0

Вы должны использовать resto.id, а не просто resto в reverse() как

return HttpResponseRedirect(urlresolvers.reverse('checkout',kwargs={'id':resto.id})) 

вместо

return HttpResponseRedirect(urlresolvers.reverse('checkout',kwargs={'id':resto})) 
+0

это все еще поднимает страницу не существует ошибка, –

+0

my urls 'url (r '^ your_order/(? P \ w +) $', show_order , name = "order_index"), 'может ли это быть проблемой? –