Select2 4.0.5 распространенные ошибки в Django admin

#javascript #jquery-select2-4 #django-2.1

#javascript #jquery-select2-4 #django-2.1

Вопрос:

(Отказ от ответственности: это вопрос с самостоятельным ответом)

Я хотел настроить некоторые Select2 для полей моей формы, находясь в панели администратора Django (в частности, в change_list.html шаблоне). Итак, я добавил необходимые скрипты на страницу (не полную версию), но при загрузке я получаю следующие ошибки:

 Select2: An instance of jQuery or a jQuery-compatible library was not found. Make
    sure that you are including jQuery before Select2 on your web page.
TypeError: a is undefined
TypeError: e is undefined
TypeError: $ is not a function
  

И когда вы ищете одну из этих ошибок (ну, не первую и не последнюю), ответы не на ту же тему (обычно это связано с плохой processResults настройкой или проблемами с Bootstrap) или ни в документах, ни в других.

Как я могу это исправить?

Ответ №1:

Для исправления требуется два шага:

Установка переменной, вызываемой $

Это первое, о чем вы думаете, когда видите последнюю строку ( TypeError: $ is not a function ), и все скрипты обычно используют ее (кто не использует $ в своих скриптах?). Но когда вы изменяете его, вы все равно получаете эти ошибки:

 TypeError: a is undefined
TypeError: e is undefined
  

Итак, мы должны пойти глубже…

Установка переменной, вызываемой jQuery

Эта ошибка может быть немного скрыта, так как нам приходится копаться в select2.js скрипте (обычно вы используете уменьшенную версию, поэтому вместо нее отображается только $ ).

Похоже, что иногда используется вызываемая переменная jQuery , поэтому вам также придется настроить ее в вашем JS.

Как должно выглядеть исправление

Добавьте этот скрипт перед вашими сценариями Select2:

 <script type="text/javascript">
    // To prevent errors for Select2 JS
    var $ = django.jQuery;
    var jQuery = django.jQuery;
</script>