Django – excepción de captura

Podría ser una pregunta para principiantes de Python

try: #do something except: raise Exception('XYZ has gone wrong...') 

Incluso con DEBUG = Verdadero, no quiero que esta raise Exception me da esa página amarilla. De hecho, quiero manejar la excepción redirigiendo a los usuarios a una página de error o mostrar el error (dar un mensaje de error de CSS en la parte superior de la página …)

¿Cómo manejo eso? ¿Puede alguien guiarme? Si simplemente lo levanto, obtendré la página de depuración amarilla (nuevamente, no quiero ciertas excepciones para detener el funcionamiento del sitio al mostrar la página de depuración cuando DEBUG = Verdadero).

¿Cómo manejo estas excepciones en views.py?

Gracias.

Tienes tres opciones aquí.

  1. Proporcionar un controlador 404 o un controlador 500
  2. Capture la excepción en otro lugar de su código y realice la redirección adecuada
  3. Proporcionar middleware personalizado con el process_exception implementado

Ejemplo de middleware:

 class MyExceptionMiddleware(object): def process_exception(self, request, exception): if not isinstance(exception, SomeExceptionType): return None return HttpResponse('some message') 

Puede generar un error 404 o simplemente redirigir al usuario a su página de error personalizada con un mensaje de error

 from django.http import Http404 #... def your_view(request) #... try: #... do something except: raise Http404 #or return redirect('your-custom-error-view-name', error='error messsage') 
  1. Error Django 404
  2. Redireccionamiento Django

Otra sugerencia podría ser usar el marco de mensajería Django para mostrar mensajes flash, en lugar de una página de error.

 from django.contrib import messages #... def another_view(request): #... context = {'foo': 'bar'} try: #... some stuff here except SomeException as e: messages.add_message(request, messages.ERROR, e) return render(request, 'appname/another_view.html', context) 

Y luego en la vista como en la documentación de Django:

 {% if messages %} 
    {% for message in messages %} {{ message }} {% endfor %}
{% endif %}