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