【问题标题】:Error getting route from urls.py从 urls.py 获取路由时出错
【发布时间】:2017-09-28 07:27:20
【问题描述】:

我正在测试应用程序。有必要测试处理到达地址'http://127.0.0.1:8000/api/v1/test/api_address/'的请求的方法。请告诉我,如通过reverse()给客户端的完整地址

class MyTestCase(APITestCase):

    def setUp(self):
        self.message = {
            'username': 'user_name',
            'password': 'user_password',
        }

    def test_get_token(self):
        response = self.client.post(reverse('api_address'), self.message)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

urls.py 的代码:

users_router = DefaultRouter()
users_router.register(r'test', TestViewSet, 'test')
users_router.register(r'test/api_address', APIAddressRequestSet, 'api_address')

对于当前的实现,reverse('map address')不起作用,会报错:

django.urls.exceptions.NoReverseMatch: Reverse for 'api_address' not found. 'api_address' is not a valid view function or pattern name.

【问题讨论】:

  • 如果出现错误,您应该发布整个内容。

标签: python django django-rest-framework


【解决方案1】:

DefaultRouter 的 url 名称是自动生成的,请检查 the docs

先设置base_name

# urls.py    
users_router = DefaultRouter()
users_router.register(r'test', TestViewSet, base_name='test')
users_router.register(r'test/api_address', APIAddressRequestSet,
                      base_name='api_address')

现在您的网址可以通过 reverse('test-list') reverse('test-detail') 等进行反向访问。请查看文档中的表格以获取其他名称。

您更新的测试:

class MyTestCase(APITestCase):

    def setUp(self):
        self.message = {
            'username': 'user_name',
            'password': 'user_password',
        }

    def test_get_token(self):
        # note the appended `-list` to the url name
        response = self.client.post(reverse('api_address-list'), self.message)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

【讨论】:

  • 不幸的是,这没有帮助:django.urls.exceptions.NoReverseMatch: Reverse for 'api_address' not found. 'api_address' is not a valid view function or pattern name.
  • 请阅读the docsDefaultRouter 会将-list-detail 附加到您的网址名称。我用你的测试更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2021-05-04
  • 2016-10-21
  • 1970-01-01
  • 2012-01-03
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
相关资源
最近更新 更多