簡體   English   中英

Django:無反向匹配

[英]Django: No reverse match

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中的工作原理,我相信要通過上述測試,我只需要在urls.py中有一個the_api URL。 但是,即使這樣,測試也無法通過。 因此,我很想知道正確的做法是什么。 我如何運行測試?

我不斷得到的錯誤是:

django.urls.exceptions.NoReverseMatch:找不到帶有參數“(1,)”和關鍵字參數“ {}”的“ the_api”。 嘗試了1個模式:['users:the_api / $']

您的網址中接受參數了嗎? 查看您的代碼,您的urls.py文件中應包含以下條目:

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

也許您也應該粘貼您的url條目和相應的視圖,以便我們可以更深入地研究問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM