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!!
