【问题标题】:Django: No reverse matchDjango:没有反向匹配
【发布时间】:2017-04-25 19:42:15
【问题描述】:
def test_post_request_for_api_view(self):
    data = {
        "email": self.user.email,
    }
    url = self.reverse('users:the_api', self.user.pk)
    response = self.json_post(data, url=url)

    self.mock.assert_called_once_with(self.user)
    data2 = json.loads(response.content.decode('utf-8'))
    self.assertEqual(data2, {
        'booking_order': ['ABCDEFGHIJKL'],
        'transaction_total': '20000.00'
    })

urls.py

​​>
urlpatterns = [
url(
    regex=r'^$',
    view=views.UserListView.as_view(),
    name='list'
),
url(
    regex=r'^~redirect/$',
    view=views.UserRedirectView.as_view(),
    name='redirect'
),
url(
    regex=r'^(?P<username>[\w.@+-]+)/$',
    view=views.UserDetailView.as_view(),
    name='detail'
),
url(
    regex=r'^~update/$',
    view=views.UserUpdateView.as_view(),
    name='update'
)    ,
url(
    regex=r'^the_api/$',
    view =  views.UserApiView.as_view(),
    name='the_api'
),

]

views.py

​​>
class UserApiView(APIView):
    authentication_classes = authentication.TokenAuthentication ###Am assuming you're authenticating via a token

    def get(self, request):
        """
        Get user based on username.
        Am getting only the username since that's the only field used above.
        :param request:
        :param format:
        :return:
        """
        details = User.objects.all()
        serializer = UserSerializer(details, many=True)
        return Response(serializer.data  )

    def post(self, request, format=None):
        """
        Create a new user instance
        :param request:
        :param format:
        :return:
        """
        serializer = UserSerializer(request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors)

就我了解 Django 中的反向工作原理而言,我相信要通过上述测试,我只需要在我的 中有一个 the_api url urls.py。 但是,即使这样,测试也没有通过。 因此,我很想知道正确的做法是什么。 如何让测试运行?

我不断收到的错误是:

django.urls.exceptions.NoReverseMatch:找不到带有参数“(1,)”和关键字参数“{}”的“the_api”的反向。尝试了 1 种模式:['users:the_api/$']

【问题讨论】:

  • 正如错误所说,您的 URL 不需要任何参数,但您正在传递一个参数(pk)。为什么?你的观点需要那个论据吗?也许你应该显示 URL 和视图。

标签: python django testing


【解决方案1】:

您的网址中是否接受了参数?查看您的代码,您的 urls.py 文件中应该有以下条目:

url(r'the_api/(\d+)/$', your_view, name="the_api")

也许您也应该粘贴您的 url 条目和相应的视图,以便我们可以更深入地研究问题。

【讨论】:

  • 谢谢。我错过了争论。
猜你喜欢
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2018-12-03
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多