DRF反向找不到正确的路线

时间:2019-08-20 16:25:23

标签: django django-rest-framework

我正在使用Django Rest Framework,但我无法获取reverse()返回用于测试目的的正确路由。在注册路线的过程中,我肯定犯了一个错误,但我似乎无法弄清楚它是什么。

core / urls.py

class CoreRouter(DefaultRouter):
    def __init__(self):
        super(DefaultRouter, self).__init__()
        self.trailing_slash = '/?'

router = CoreRouter()
router.register(r'works', WorkViewSet, base_name='work')
router.registry.extend(fairs_exhibitions_router.registry)

urlpatterns = [
    re_path(r'^api/(?P<version>(v1))/', include(router.urls)),
    re_path(r'^api/(?P<version>(v1))/', include('fairs_exhibitions.urls')),
]

fairs_exhibitions / urls.py:

router = CoreRouter()

router.register(r'fairs', FairTagViewSet, base_name='fair')
router.register(r'exhibitions', ExhibitionTagViewSet, base_name='exhibition')

urlpatterns = [
    url(r'^', include(router.urls)),
]

(我省略了/有两条不相关的路线)

我可以打api/v1/fairs很好,但是当我尝试使用reverse()时,我似乎找不到集市的路径:

reverse(fairs)reverse(fairs-list)只是说找不到它

距离我最近的是reverse('fair-list'),它产生了此错误:

  

NoReverseMatch:反向“公平列表”,未找到任何参数。尝试了4种模式:['api /(?P(v1))/ fairs /?\。(?P [a-z0-9] +)/?$','api /(?P(v1) )/ fairs /?$','api /(?P(v1))/ fairs /?\。(?P [a-z0-9] +)/?$','api /(?P(v1) )/ fairs /?$']

似乎我的问题可能与?$有关,但我无法弄清问题的出处或如何处理。

1 个答案:

答案 0 :(得分:1)

网址中需要

kwargs,即version需要具有相反的功能。

reverse('fair-list', kwargs={'version':'v1'})

有关更多详细信息,请访问urls utility functions

相关问题