Django:如何在urls.py urlpatterns中使用裸类?

mie*_*nik 1 django url class

我在某处看到过像这样的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?

Dan*_*man 5

所有urlconf都关心的是视图的值是可调用的.只要类定义了一个__call__方法,Callables就可以是类实例.这个方法需要接受来自url的参数 - 你没有解释你的'items'方法是什么,但它可能是从中调用的__call__.