0

私には機能があります、

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. しました。正しい方向に進んでいると思いましたが、そうではなかったと思います。

show_order私で編集する

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

URLで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"),
4

3 に答える 3

0

のようにresto.idではなく、使用する必要がありますrestoreverse()

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

それ以外の

return HttpResponseRedirect(urlresolvers.reverse('checkout',kwargs={'id':resto}))
于 2013-03-08T09:21:05.493 に答える
0

この get_checkout_url 関数は必要なく、URL の id 引数を渡す必要があります。

return HttpResponseRedirect(checkout_url)これを試す代わりに:

HttpResponseRedirect(urlresolvers.reverse('checkout',kwargs={'id':your_id}))
于 2013-03-08T08:46:55.953 に答える
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}))
于 2013-03-08T09:15:12.700 に答える