That's only one of the needed steps. Adjust your headers so that static items are not reloaded frequently. Use versioned urls (e.g., /scripts/main.js?234) and update the versions only when you change the scripts or CSS. YSlow goes a long way in helping with that kind of stuff.
The same applies for S3 uploads. You can pass cache headers in the upload request which will later be used on all downloads.
Do you know something that can modify django templates that contain CSS & JS imports so that the linked version gets updated with each checked in change to the files?
The same applies for S3 uploads. You can pass cache headers in the upload request which will later be used on all downloads.