Django Rest Framework 反向和 SimpleRouter
Posted
技术标签:
【中文标题】Django Rest Framework 反向和 SimpleRouter【英文标题】:Django Rest Framework reverse and SimpleRouter 【发布时间】:2015-05-03 12:50:49 【问题描述】:如何使用 DRF 的 reverse
从 SimpleRouter
调用复杂的 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
调用URL
。 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'
)
【讨论】:
-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