Django Rest Framework 反向和 SimpleRouter

Posted

技术标签:

【中文标题】Django Rest Framework 反向和 SimpleRouter【英文标题】:Django Rest Framework reverse and SimpleRouter 【发布时间】:2015-05-03 12:50:49 【问题描述】:

如何使用 DRF 的 reverseSimpleRouter 调用复杂的 URL?

我的网址在两个地方,一个是团队的,一个是游戏的,如下:

league.urls:

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

team.urls:

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

我正在尝试reverse 网址更新游戏。基于 DRF SimpleRouter,这应该是“/team/pk/game/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

【问题讨论】:

您是否尝试过将它们声明为 kwargs 并以这种方式调用 URL? @AronYsidoro 谢谢 - 这可能是问题所在。我可以调用 url = reverse('teams-detail', kwargs= 'pk': game.team.pk, 'pk': game.pk ) 在这两个级别上,我都使用 pk 来识别团队/游戏。这是一个问题还是有其他方法可以使用 kwargs 调用 URL?这不起作用 - 给我和以前一样的错误。所以要么我遗漏了一些东西,要么必须有更好的方法来调用这个reverse :)。再次感谢您的帮助! 【参考方案1】:

YPCrumble,您可能想用不同的kwargs 调用URLURL 正则表达式以处理 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'
)

【讨论】:

-detail 和 -list 对我来说是个大问题。这是否在文档中的某处提到,或者我想如何知道该语法? @AlexZamai 这里提到:django-rest-framework.org/api-guide/routers/#simplerouter

以上是关于Django Rest Framework 反向和 SimpleRouter的主要内容,如果未能解决你的问题,请参考以下文章

Django REST framework 的TokenAuth认证及外键Serializer基本实现

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

Django rest framework 身份和权限验证

Django:rest framework之分页(Pagination)

django-rest-framework-datatables 和 Django Parler 的翻译字段