2014-12-05 84 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)) 
相关问题