2016-04-17 2 views
1

У меня есть viewet и некоторые методы в нем, и getchedule является одним из них.Django URL to View mapping

def getschedule(self, request): 

В urls.py если сопоставить метод getschedule как этот

url(r'^event/(?P<pk>[0-9]+)/getschedule/$', EventSingleViewSet.getschedule, name='event-schedule'), 

я получаю эту ошибку "getschedule() отсутствует 1 требуется позиционная аргумент: 'запрос' "

Но если я сделаю картографию следующим образом,

url(r'^event/(?P<pk>[0-9]+)/getschedule/$', event_getschedule, name='event-schedule'), 
...... 
event_getschedule = EventViewSet.as_view({ 
    'get': 'getschedule' 
}, renderer_classes=[JSONRenderer]) 

это работает и дает мне ответ.

Я не понимаю, как запрос передается методу во втором подходе. Нужна помощь в понимании этого.

Я также хотел бы знать, как я мог сделать свой первый подход.

+0

Что такое просмотр? Похоже, вы смешиваете [на основе класса] (https://docs.djangoproject.com/en/dev/topics/class-based-views/) и [процедурный] (https://docs.djangoproject.com/en/dev/themes/http/views/# a-simple-view). – solarissmoke

+0

@solarissmoke - это представление, которое не обрабатывает HTTP-запросы, но позволяет читать и обновлять. Это часть [django-rest-framework] (http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/). –

+0

Я думаю, вы должны попробовать это в 'urls.py': ' from .views.EventSingleViewSet import getschedule как getEventSchedule', а затем использовать его как одно имя переменной без оператора точки вместо «EventSingleViewSet.getschedule». Если это сработает, тогда это будет только принятый синтаксис 'urlpatterns', который будет на вашем пути. –

ответ

2

Если Viewset уже привязан к маршрутизатору, то вы можете использовать

@detail_route или @list_route указать его URL-адрес с именем вашего метода Viewset.

Проверьте эту часть документации: http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/

В противном случае, это будет иметь смысл использовать план вид класса расширения APIView и указав ссылку на на него.

Просмотров в основном полезны при привязке к маршрутизатору.

+0

Использование этого в маршрутизаторе прямо так: «router.register (r'event/(? P [0-9] +)/getschedule/', EventViewSet.getschedule, base_name =' event-schedule ')" работал для меня –

+0

Я также хотел бы знать, могу ли я сопоставить URL-адрес с помощью первого подхода, упомянутого в моем вопросе. –

+0

да, вы можете. --- urlpatterns + = [url (r'full_path_here/$ ', YourViewSet.as_view ({' get ':' method_name '}))] – iankit