我正在使用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 /?$']
似乎我的问题可能与?$
有关,但我无法弄清问题的出处或如何处理。
答案 0 :(得分:1)
kwargs
,即version
需要具有相反的功能。
reverse('fair-list', kwargs={'version':'v1'})
有关更多详细信息,请访问urls utility functions