2015-03-03 83 views
4

如何使用DRF的reverseSimpleRouter调用复杂的URL?Django Rest Framework反向和SimpleRouter

我的URL是在两个地方,一个是团队,以及一个游戏,具体如下:

league.urls:

url(r'^team/', include('teams.urls')), 

team.urls:

router = SimpleRouter() 
router.register(r'game', GameViewSet, 'games') 

我试图以reverse的网址更新游戏。基于该DRF SimpleRouter,这应该是 “/团队/ {} PK /游戏/ {} PK”

我的测试呼吁:

url = reverse('games-detail', args=[team.pk, game.pk]) 

但我发现了以下错误:

raise error, v # invalid expression 
error: redefinition of group name u'pk' as group 2; was group 1 
+0

你试过把它们声明为'kwargs'并且调用URL的方式吗? – 2015-03-03 01:06:41

+0

@AronYsidoro谢谢 - 这可能是问题所在。我只需要调用url = reverse('teams-detail',kwargs = {'pk':game.team.pk,'pk':game.pk})在这两个层次上,我使用pk来识别团队/游戏。这是一个问题,还是有另一种方法使用kwargs来调用URL? 这不起作用 - 给我和以前一样的错误。所以要么我错过了一些东西,要么有一个更好的方法来调用这个'reverse' :)。再次感谢您的帮助! – YPCrumble 2015-03-03 01:19:33

回答

6

YPCrumble,你想打电话URL不同kwargsURL正则表达式以处理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' 
) 
+0

-detail和-list对我来说是个大问题。 这是在文档中的某处提到的,或者我想如何知道该语法? – 2017-09-05 19:04:07

+0

@AlexZamai在此提及:http://www.django-rest-framework.org/api-guide/routers/#simplerouter – 2017-10-25 18:27:00

相关问题