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

时间:2009-12-08 11:44:23

标签: django class url

我在某处找到了像这样的urls.py结构:

from project.f import SomeClass

urlpatterns = patterns('',
   (r'^url/$', SomeClass()),
)

http://docs.djangoproject.com/en/dev/topics/http/urls/我无处可去 找出这意味着什么,通常一个条目是这样的:

   (r'^url/(?P<some_id>\d+)/$', 'project.views.some_view'),

有人可以向我解释一下如何只使用SomeClass()吗?

SomeClass()构造在没有参数的情况下有效,但我想这样做 在那里有参数,所以我做了这样的事情:

   (r'^url/(?P<some_id>\d+)/$', SomeClass()),

并修改了SomeClass:

class SomeClass(OtherClass):

    def items(self):
        return MyItems.objects.all()

为:

class SomeClass(OtherClass):

    def items(self, some_id):
        return MyItems.objects.filter(pk=some_id)

现在访问/ url /我得到:

TypeError at /url/12/

items() takes exactly 2 arguments (1 given)

所以看起来没有传递参数。如果我尝试输入urls.py:

   (r'^url/(?P<some_id>\d+)/$', SomeClass(some_id)),

我明白了:

NameError at /url/12/

name 'some_id' is not defined

如何在此设置中制作正确的urlpatter?

1 个答案:

答案 0 :(得分:5)

所有urlconf都关心的是视图的值是可调用的。只要类定义了__call__方法,Callables就可以是类实例。这种方法需要接受来自网址的参数 - 你没有解释你的“项目”方法是什么,但它可能是从__call__调用的。