Подтвердить что ты не робот

Как вызвать URL-адрес платформы Django Rest Framework с помощью namespacing?

У меня есть urls.py, который выглядит так:

router = SimpleRouter()
router.register(r'meetings', MeetingViewSet, 'meetings-list')

urlpatterns = patterns('clubs.views',
    url(r'^(?P<pk>\d+)/', include(router.urls)),
    url(r'^amazon/$', AmazonView.as_view(), name="amazon"),)

Я хочу ссылаться на url 'meetings-list', используя reverse, как в:

url = reverse('meetings-list')

но когда я попробую это, я получаю NoReverseMatch: Reverse for 'MeetingViewSet' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

Есть ли способ сделать это с помощью Django Rest Framework?

4b9b3361

Ответ 1

При регистрации представлений с маршрутизатором вы можете передать base_name в качестве третьего аргумента. Это базовое имя используется для генерации отдельных имен URL-адресов, которые генерируются как [base_name]-list и [base_name]-detail.

В вашем случае вы регистрируете свой viewet как

router.register(r'meetings', MeetingViewSet, 'meetings-list')

Итак, base_name - meetings-list, а имена видов - meetings-list-list и meetings-list-detail. Похоже, вы ищете meetings-list и meetings-detail, для чего требуется base_name meetings.

router.register(r'meetings', MeetingViewSet, 'meetings')

Вы также используете синтаксис patterns, устаревший для определения URL-адресов, но на самом деле вы не используете правильные вызовы url, которые работают с ним. Я бы порекомендовал просто заменить patterns и обернуть ваш список URL-адресов стандартным списком/кортежем Python ([] или ()).

Это должно исправить вашу проблему, и вызов reverse должен быть разрешен для вас.

Ответ 2

Я думаю, что это выглядит намного лучше и чище для вас:

router_urls = patterns(
    '',
    url(r'^meetings/$', MeetingViewSet.as_view(), 'meetings-list'),
)

urlpatterns = patterns(
    '',
    url(r'^(?P<pk>\d+)/', include(router_urls, namespace='router')),
)

Затем вы делаете reverse('router:meetings-list', args=(pk, ))

Я предположил, что MeetingViewSet является CBV