Coverage for netbox/views/errors.py: 80%
28 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import platform
2import sys
4from django.conf import settings
5from django.http import HttpResponseServerError
6from django.shortcuts import render
7from django.template import loader
8from django.template.exceptions import TemplateDoesNotExist
9from django.views.decorators.csrf import requires_csrf_token
10from django.views.defaults import ERROR_500_TEMPLATE_NAME, page_not_found
11from django.views.generic import View
13from netbox.plugins.utils import get_installed_plugins
15__all__ = (
16 'StaticMediaFailureView',
17 'handler_404',
18 'handler_500',
19)
22class StaticMediaFailureView(View):
23 """
24 Display a user-friendly error message with troubleshooting tips when a static media file fails to load.
25 """
26 def get(self, request):
27 return render(request, 'media_failure.html', {
28 'filename': request.GET.get('filename')
29 })
32def handler_404(request, exception):
33 """
34 Wrap Django's default 404 handler to enable Sentry reporting.
35 """
36 if settings.SENTRY_ENABLED: 36 ↛ 37line 36 didn't jump to line 37 because the condition on line 36 was never true
37 from sentry_sdk import capture_message
38 capture_message("Page not found", level="error")
40 return page_not_found(request, exception)
43@requires_csrf_token
44def handler_500(request, template_name=ERROR_500_TEMPLATE_NAME):
45 """
46 Custom 500 handler to provide additional context when rendering 500.html.
47 """
48 try:
49 template = loader.get_template(template_name)
50 except TemplateDoesNotExist:
51 return HttpResponseServerError('<h1>Server Error (500)</h1>', content_type='text/html')
52 type_, error = sys.exc_info()[:2]
54 return HttpResponseServerError(template.render({
55 'request': request,
56 'error': error,
57 'exception': str(type_),
58 'netbox_version': settings.RELEASE.full_version,
59 'python_version': platform.python_version(),
60 'plugins': get_installed_plugins(),
61 }))