【问题标题】:Django: how to use bare classes in urls.py urlpatterns?Django:如何在 urls.py urlpatterns 中使用裸类?
【发布时间】:2009-12-08 11:44:23
【问题描述】:

我在某处见过这样的 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

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

【问题讨论】:

    标签: django class url


    【解决方案1】:

    所有 urlconf 关心的是视图的值是可调用的。只要类定义了__call__ 方法,可调用对象就可以是类实例。正是这种方法需要接受来自 url 的参数——你还没有解释你的 'items' 方法是什么,但它可能是从__call__ 调用的。

    【讨论】:

    • +1 对于所有 urlconf 关心的是视图的值是可调用的。我正要发布同样的东西。
    • 非常有趣 - 我不确定这是否会派上用场,但我很高兴知道它 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2011-03-11
    • 2021-07-27
    • 2017-02-02
    相关资源
    最近更新 更多