Steohawk
Steohawk

Reputation: 95

Django REST Framework - NoReverseMatch when using reverse()

I've been trying to return some URLs using the reverse() function, but no matter what, I get a NoReverseMatch exception:

Reverse for 'folder' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

For the sake of troubleshooting, I created some dumbed-down code, but it STILL won't work. Here's my view:

from rest_framework.response import Response
from rest_framework.reverse import reverse
from rest_framework.views import APIView

class Folder(APIView):
    def get(self, request, format=None):
        return Response({'url': reverse('folder', request=request)})

Here's my URL pattern:

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from music import views

urlpatterns = format_suffix_patterns([
    url(r'^folder/$', views.Folder.as_view(), name='folder')])

Upvotes: 6

Views: 3852

Answers (2)

Monkey_D_Luffy
Monkey_D_Luffy

Reputation: 11

I had the same issue dealing with reverse() Django-Rest-Framework when trying to get reverse for a model in serializers.py

    ....

    def get_links(self, obj):
        request = self.context['request']
        return {
            'self': reverse('sprint-detail',
                kwargs={'pk': obj.pk}, request=request),
        }

adding the app to the reverse solved it my_app

    ....

    def get_links(self, obj):
        request = self.context['request']
        return {
            'self': reverse('my_app:sprint-detail',
                kwargs={'pk': obj.pk}, request=request),
        }

Upvotes: 1

trinchet
trinchet

Reputation: 6933

You shouldn't pass the request:

{'url': reverse('folder')}

or

{'url': reverse('appname:folder')}

if you are using namespaced URLs

Upvotes: 7

Related Questions