3👍
If you use singleton you will run into thread-safety issue. E.g. your application run in several threads, one thread process single request, so you global object should be per thread, but singleton is unique per process.
You can use threading.local
technique like described in this question. It will provide you object that is unique per thread and so per request.
However it’s not recommended, so don’t use global variables
For your situation with widgets there are Media settings in widgets and forms in Django. https://docs.djangoproject.com/en/1.3/topics/forms/media/
Media objects can also be added together. When two media objects are added, the resulting Media object contains the union of the media from both files.
So you can fight duplicates with media.
Also you can combine media right into the template
{{ form.media|add:info_form.media|add:discount_form.media }}