2013-03-07 27 views
0

我有兩個觀點,我應該如何去了解一個TypeError()函數到底需要2個參數(1給出)

def create_order(request,id): 
    orders = Order() 
    orders.restaurant = Restaurant.objects.get(pk=id) 
    orders.save() 

    if orders.pk: 
     .... 
    return orders 

第二視圖調用第一個,

def show_checkout(request,id): 
    if order.is_empty(request): 
     ... 
    if request.method == 'POST': 
     restaurant = Restaurant.objects.get(pk=id) 
     form = forms.CheckoutForm(request.POST,instance=restaurant) 
     if form.is_valid(): 
      order_created = create_order(request,restaurant) 
      ....... 
    return render_to_response('checkout/checkout.html',context,context_instance=RequestContext(request)) 

我當我運行此我得到的錯誤`

show_checkout()到底需要2個參數(1給出)` 我的回溯,

Traceback: 
File "/home/matsinvasion/projects/f4l/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 

Exception Type: TypeError at /orders/checkout/ 
Exception Value: show_checkout() takes exactly 2 arguments (1 given) 

我去了解這一點,並在處理參數表明一個良好的閱讀理解

from .views import show_item, show_order,get_category,homepage,show_checkout,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/$',show_order,name="order_index"), 
    url(r'^item/(?P<id>\w+)/$',show_item, name="item_order"), 
    url(r'^checkout/$',show_checkout,name="checkout"), 
    url(r'^reciept/$',reciept,name="checkout_reciept"), 
) 

固定urls.py,提出了在這個函數NoReverseMatch error

Reverse for 'checkout' with arguments '()' and keyword arguments '{}' not found. 
    def get_checkout_url(request): 
     return urlresolvers.reverse('checkout') 
+0

你可以發表你的'urls.py'? – 2013-03-07 21:04:53

+0

@ TimmyO'Mahony我剛剛做到了。 – 2013-03-07 21:14:33

回答

1

show_checkout觀點正在第二個id參數,你沒有在你的URL中進行計算。

你需要將它添加到您的網址如下:

url(r'^checkout/(?P<checkout_id>[\w|\W]+)$',show_checkout,name="checkout"), 

當你調用的URL在你的模板,你需要通過你是在像這樣的觀點,要求對id

{% url checkout checkout.id %} 

或者,如果你正在使用Django 1.5:

{% url 'checkout' checkout.id %} 
+0

正在嘗試您的答案,並且在另一個函數中出現錯誤,請檢查我的編輯。 – 2013-03-07 21:43:26

+0

您再次調用'show_checkout'視圖,而不需要'id'參數。您需要將return語句更改爲'return urlresolvers.reverse('checkout',args =(whatever_your_checkout_id_variable_is,))' – 2013-03-07 21:47:04

+0

您還應該仔細閱讀「reverse」和「{%url%}」的文檔:https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls – 2013-03-07 21:47:53

相關問題