2014-12-05 91 views
0

在主urls.py查看到底需要2個參數(1給出)

url(r'^request/(Req_.*)/someoperation/',include(someoperation.urls)) 

someoperation.urls

url(r'^query$', queryPage), 

queryPage樣子:

def queryPage(request, request_id): 
    #somestuff 
    return HttpResponse('OK') 

越來越打開的網址:

myhost:myport/request/Req_ABCXYZ/someoperation/query 

但我得到這個錯誤:

ec/2014 05:41:18] ERROR [django.request:215] Internal Server Error: /request/Req_ABCXYZ/someoperation/query 
Traceback (most recent call last): 
    File "/opt/xyz/build/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
TypeError: queryPage() takes exactly 2 arguments (1 given) 

可能是什麼回事?我相信Req_.*比賽Req_ABCXYZ;所以它應該被傳遞到視圖queryPage

任何線索?

回答

0

像錯誤消息說,你只傳遞一個變量的函數,當它的預期兩項。假設您的函數需要request_id才能工作,您必須修改您的urls.py,以便從URL中捕獲request_id並將其傳遞給視圖。

這個簡單的例子應該給你一個想法如何去了解它:

urls.py

urlpatterns = patterns('', 
    url(r'^(?P<slug>[\w\-]+)/$', 'base.views.index'), 
) 

views.py

def index(request, slug=None): 
    if slug is not None: 
     return HttpResponse(slug) 
    else: 
     return HttpResponse("No slug provided") 

這基本上是一個案件在(?INSERT_REGEX_HERE)標籤中包裝你的正則表達式,所以你的情況是:

(?P<request_id>Req_.*) 
+0

Django應該捕獲URL,即使沒有嘗試命名該參數。命名捕獲的元素可以修復它,謝謝!我不知道爲什麼其他方式不起作用。 – user1265125 2014-12-05 12:50:36

+0

啊,是的,好點。你的括號中包含了所有Req _。*,而你想要的是: 'url(r'^ request/Req _(。*)/ someoperation /',include(someoperation.urls))' – 2014-12-05 15:53:45

1

試試這個:

url(r'^request/(?P<request_id>Req_.*)/someoperation/',include(someoperation.urls)) 
相關問題