Django Rest Framework反向和SimpleRouter

YPC*_*ble 8 django django-urls django-rest-framework

如何使用DRF reverse来调用复杂的URL SimpleRouter

我的网址位于两个地方,一个用于团队,另一个用于游戏,如下所示:

league.urls:

url(r'^team/', include('teams.urls')),
Run Code Online (Sandbox Code Playgroud)

team.urls:

router = SimpleRouter()
router.register(r'game', GameViewSet, 'games')
Run Code Online (Sandbox Code Playgroud)

我正在尝试reverse更新游戏的网址.基于DRF SimpleRouter,这应该是"/ team/{pk}/game/{pk}"

我的测试是:

url = reverse('games-detail', args=[team.pk, game.pk])
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

    raise error, v # invalid expression
error: redefinition of group name u'pk' as group 2; was group 1
Run Code Online (Sandbox Code Playgroud)

Aar*_*ier 13

YPCrumble,你想要URL与不同的人打电话kwargs.在URL正则表达式的工作的方式来处理kwargs.例如:

# python reverse url
url = reverse('games-detail', kwargs={'team_pk': 1, 'group_pk':1})

# url regex
url(
    r'^team/(?P<team_pk>\d+)/group/(?P<group_pk>\d+)/$',
    view.SimpleRouterDetailView.as_view(),
    name='games-detail'
)
Run Code Online (Sandbox Code Playgroud)

  • @AlexZamai 这里提到了:http://www.django-rest-framework.org/api-guide/routers/#simplerouter (3认同)