django-cms this.ui.container.data(...).push is not a function

19 июня 2021 г. 7:02

В django 3.7.X (возможно, и в более ранней версии) до текущей 3.8.0 (на момент написания статьи) существует ошибка при открытии структуры страницы:

`Uncaught TypeError: this.ui.container.data(...).push is not a function
at s.initialize (bundle.toolbar.min.js:1)

Возникает она тогда, когда шаблон содержит несколько static_placeholder с одинаковыми именами, например: {% static_placeholder 'header' %}.

На гитхабе есть тикет https://github.com/django-cms/django-cms/issues/6889, и пока что разработчики не поправили это дело.

Покопавшись в файле bundle.toolbar.min.js, где возникает ошибка, я смог найти временное решение.

Временное решение ошибки

Нужно скопировать файл /path_to_env_of_my_project/lib/python3.8/site-packages/cms/static/cms/js/dist/3.8.0/bundle.toolbar.min.js в /path_to_my_project/static/cms/js/dist/3.8.0/bundle.toolbar.min.js.

Обратите внимание, что вместо имени папки 3.8.0 используйте имя папки соответствующее вами используемой версии django-cms. Если вы используете django-cms == 3.7.4, то путь будет такой path_to_my_project/static/cms/js/dist/3.7.4/bundle.toolbar.min.js

Этот файл содержит минифицированный (сжаты) код js, поэтому для удобства вы можете реформатировать код в этом файле. В PyCharm-е это делается в меню Code \ Reformat code (горячая клавиша Ctrl + Alt + L)

Затем перед кодом, где возникает ошибка (найти строчку можно, например, через инструменты разработчика гугл и поиск строки кода в файле) добавить if (Array.isArray(this.ui.container.data("cms"))):

...case"plugin":if (Array.isArray(this.ui.container.data("cms"))) this.ui.container.data("cms").push(this.options), xe.aliasPluginDuplicatesMap[this.options.plugin_id] = !0, this._setPlugin(), _e() && this._collapsables();...

Теперь django-cms будет подхватывать новый файл и ошибки больше не должно быть.

 

Также имейте ввиду, что я проверял такой способ только на django-cms версии 3.8.0, поэтому не факт, что с другими версиями может сработать.

Также вы можете скачать мой поправленный файл bundle.toolbar.min.js для django-cms == 3.8.0:

bundle.toolbar.min.js (668,2 КБ)

Оцените статью

0 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/django-cms-uicontainerdatapush-not-function/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/django-cms-uicontainerdatapush-not-function/">https://vivazzi.pro/ru/it/django-cms-uicontainerdatapush-not-function/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц