Представление класса Django: __init__

Я хочу получить <Model> значение из URL и использовать его как __init__ параметр в моем классе.

urls.py
url(r'^(?P<Model>\w+)/foo/$', views.foo.as_view(), name='foo_class'),

views.py
class foo(CreateView):
    def __init__(self, **kwargs): 
        text = kwargs['Model']         # This is not working
        text = kwargs.get('Model')     # Neither this
        Bar(text)
        ...

Понятно, что я что-то упустил, или мое понимание URL <> классовое представление неверно.

1 ответ

Решение

Вы должны переопределить dispatch метод для таких случаев использования.

class Foo(CreateView):

    def dispatch(self, request, *args, **kwargs):
        # do something extra here ...
        return super(Foo, self).dispatch(request, *args, **kwargs)

Однако для вашего конкретного сценария вы можете получить прямой доступ self.kwargs поскольку общие представления автоматически назначают их в качестве переменной экземпляра в экземпляре представления.

Другие вопросы по тегам