500 error handler. Displays a full trackback for superusers and the first line of the
    traceback for staff members.

    Templates: `500.html` or `500A.html` (admin)
    Context: trace
        Holds the traceback information for debugging.

def custom_server_error(request, template_name='500.html', admin_template_name='500A.html'):
    """
    500 error handler. Displays a full trackback for superusers and the first line of the
    traceback for staff members.

    Templates: `500.html` or `500A.html` (admin)
    Context: trace
        Holds the traceback information for debugging.
    """
    trace = None
    if request.user.is_authenticated() and (request.user.is_staff or request.user.is_superuser):
        try:
            import traceback, sys
            trace = traceback.format_exception(*(sys.exc_info()))
            if not request.user.is_superuser and trace:
                trace = trace[-1:]
            trace = '\n'.join(trace)
        except:
            pass
    
    # if url is part of the admin site, use the 500A.html template
    if request.path.startswith('/%s' % admin.site.name):
        template_name = admin_template_name
         
    t = loader.get_template(template_name) # You need to create a 500.html and 500A.html template.
    return http.HttpResponseServerError(t.render(Context({'trace': trace})))