Django Rest Framework 404 Not Found/PUT/DELETE

Here’s the solution I found that works, thanks to a bit of searching. In renderers.py file in the app directory, create a custom BrowsableAPIRenderer class and override get_context() and get_rendered_html_form(). The first method sets the context for display on the PUT HTML form. The latter method disables the DELETE button from showing.

# renderers.py
from rest_framework.renderers import BrowsableAPIRenderer

class MyBrowsableAPIRenderer(BrowsableAPIRenderer):

    """
    Only render the browsable API if there is no 404 error
    """

    def get_context(self, *args, **kwargs):
        context = super().get_context(*args, **kwargs)

        response = args[2]['response']
        if response.status_code == 404:
            # do not display PUT form
            context['display_edit_forms'] = False

        return context

    def get_rendered_html_form(self, data, view, method, request):
       """
       {
          "detail": "Not found."
       }
       """
        if 'detail' in data:
            return
        return super().get_rendered_html_form(data, view, method,  request)

In settings.py file, add these settings to use the default JSONRenderer and our custom MyBrowsableAPIRenderer:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'planner.renderers.MyBrowsableAPIRenderer',
    ),
}

Hope this helps!!