I've included a couple of third-party jQuery plugins in my Django admin base template which assume "$" to be available.
For my own code, I've always been happy to just do
(function($) {
my_code = 'here';
})(django.jQuery);
but how can I provide "$" to other people's code which sits in external files?
<script src="{{ STATIC_URL }}js/jquery.json-2.2.min.js" type="text/javascript"></script>
complains that "$" is undefined. I've tried to put
<script type="text/javascript">var $ = django.jQuery;</script>
before that external reference, but to no avail (btw, why is that? I understand loading happens concurrently, but execution? I can use that "$" immediately after defining it.).
I'm happy with the jQuery version that Django admin provides and really don't want to load another one. I also don't want to edit someone else's plugin so that it starts with the above "$" re-definition. EDIT: Neither do I want to wrap it like my own code, I just don't want to touch those files at all.
Do I really have to resort to putting $.getScript() - http://api.jquery.com/jQuery.getScript - into my anonymous function to load such files?
EDIT: After actually looking into that external file jquery.json-2.2.min.js, I saw it was already wrapped into a function that assumed "jQuery" to be available, rather than "$". After inserting
var jQuery = django.jQuery;
before the external reference, it worked fine. But is this really how this should be done?
Override django's staticfile
admin/js/jquery.init.js
by creating a file with the same name and path in your app's staticfiles directory.The original content is this
Just remove the
.noConflict(true)
.For third party plugins, it's usually best to load your own copy of jQuery before including the other plugins. For Django 1.4+ this may look like so in your corresponding admin.py file:
If your plugins do not depend on a recent version of jQuery, you may also use Django's included version by defining $ and jQuery at the top of your plugin:
As of version 1.6, Django will ship with jQuery 1.9.1. Before that, jQuery 1.4 is used, which does not work for a lot of new/updated plugins.
Yeah, I remember this problem. I feel your pain.
A great workaround is to restructure your js files in such a way that Django can read them as URLs. In your URLs file, add the pattern below:
Now, in your init.py, add the following code:
Once the code is in place and assuming you have your javascript files in /js/* you can include your javascript by using the code below: