我在某处看到过像这样的urls.py结构:
from project.f import SomeClass
urlpatterns = patterns('',
(r'^url/$', SomeClass()),
)
Run Code Online (Sandbox Code Playgroud)
无处http://docs.djangoproject.com/en/dev/topics/http/urls/我可以找出这意味着什么,通常一个条目是这样的:
(r'^url/(?P<some_id>\d+)/$', 'project.views.some_view'),
Run Code Online (Sandbox Code Playgroud)
有人可以解释我是如何只使用SomeClass()吗?
如果SomeClass()构造是无参数的,那么SomeClass()构造可以工作,但是我想在那里有参数,所以我做了这样的事情:
(r'^url/(?P<some_id>\d+)/$', SomeClass()),
Run Code Online (Sandbox Code Playgroud)
并修改了SomeClass,它是:
class SomeClass(OtherClass):
def items(self):
return MyItems.objects.all()
Run Code Online (Sandbox Code Playgroud)
至:
class SomeClass(OtherClass):
def items(self, some_id):
return MyItems.objects.filter(pk=some_id)
Run Code Online (Sandbox Code Playgroud)
现在访问/ url /我得到:
TypeError at /url/12/
items() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
所以看起来参数不会传递.如果我尝试输入urls.py:
(r'^url/(?P<some_id>\d+)/$', SomeClass(some_id)),
Run Code Online (Sandbox Code Playgroud)
我明白了:
NameError at /url/12/
name 'some_id' is not defined
Run Code Online (Sandbox Code Playgroud)
如何在此设置中制作正确的urlpatterns?
所有urlconf都关心的是视图的值是可调用的.只要类定义了一个__call__
方法,Callables就可以是类实例.这个方法需要接受来自url的参数 - 你没有解释你的'items'方法是什么,但它可能是从中调用的__call__
.