Python 在Django Rest框架中测试时获取路由器url名称
我有一些问题。我在Django Rest框架中使用路由器,我想测试一些api方法 在url.py中:Python 在Django Rest框架中测试时获取路由器url名称,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,我有一些问题。我在Django Rest框架中使用路由器,我想测试一些api方法 在url.py中: router = DefaultRouter() router.register(r'my-list', MyViewSet, base_name="my_list") urlpatterns = [ url(r'^api/', include(router.urls, namespace='api'), ), ] 因此,在tes
router = DefaultRouter()
router.register(r'my-list', MyViewSet, base_name="my_list")
urlpatterns = [
url(r'^api/', include(router.urls,
namespace='api'), ),
]
因此,在tests.py中,我想使用类似reverse的东西。现在我用
response = self.client.get('/api/my-list/')
这是一个硬编码字符串,如果我使用:
response = self.client.get(reverse('api:my_list')
我有一个错误:
django.core.urlresolvers.NoReverseMatch: Reverse for 'my_list' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
如何解决这个问题
谢谢 DRF在视图集中为不同的URL添加后缀-列表、详细信息和可能的自定义URL。你可以在许多方面看到这一点。因此,在您的情况下,实际的相反情况应该是:
reverse('api:my_list-list') # for list URL. e.g. /api/my-list/
reverse('api:my_list-detail') # for detail URL. e.g. /api/my-list/<pk>/
列表URL的reverse('api:my_list-list')#。e、 g./api/我的清单/
反向('api:my_list-detail')#表示详细URL。e、 g./api/我的清单//
这就是为什么使用资源名作为路由器可能更好的原因
base\u name
。例如,base\u name='user'
vsbase\u name='users\u list'
base\u name
被basename
替换三个小时以找到答案。我只是意识到这是因为我在查看drf文档,他们使用的是相同的方法。我很感激你的回答。