@@ -164,7 +164,8 @@ def handle_uncaught_exception(self, request, resolver, exc_info):
164164 except :
165165 request_repr = "Request repr() unavailable"
166166 message = "%s\n \n %s" % (self ._get_traceback (exc_info ), request_repr )
167- mail_admins (subject , message , fail_silently = True , html_message = html )
167+ extra_emails = self ._get_extra_emails (exc_info )
168+ mail_admins (subject , message , fail_silently = True , html_message = html , extra_emails = extra_emails )
168169 # Return an HttpResponse that displays a friendly error message.
169170 callback , param_dict = resolver .resolve500 ()
170171 return callback (request , ** param_dict )
@@ -174,6 +175,17 @@ def _get_traceback(self, exc_info=None):
174175 import traceback
175176 return '\n ' .join (traceback .format_exception (* (exc_info or sys .exc_info ())))
176177
178+ def _get_extra_emails (self , exc_info = None ):
179+ "Helper function to retrieve app-specific admin email lists."
180+ etype , value , tb = exc_info or sys .exc_info ()
181+ admins = []
182+ while tb is not None :
183+ f = tb .tb_frame
184+ if "DEBUG_EMAILS" in f .f_globals :
185+ admins += f .f_globals ["DEBUG_EMAILS" ]
186+ tb = tb .tb_next
187+ return admins
188+
177189 def apply_response_fixes (self , request , response ):
178190 """
179191 Applies each of the functions in self.response_fixes to the request and
0 commit comments