Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Django: как использовать голые классы в urlpatterns urls.py?

Автор вопроса: riaОтветов: 1

Я где-то видел такую ​​конструкцию 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()

to:

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

Как сделать правильные URL-шаблоны в этой настройке?

djangourlclass

Ответы

Ответ 1 · рейтинг 5 · Daniel Roseman

Все, о чем заботится urlconf, это то, что значение для представления является вызываемым. Вызываемые объекты могут быть экземплярами класса, если класс определяет метод __call__. Именно этот метод должен принимать параметры из URL-адреса - вы не объяснили, что такое ваш метод "элементов", но предположительно он вызывается из __call__.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы