DjangoCMS Sekizai {% render_block "js" %} отключить использование jQuery

Я работаю над приложением DjangoCMS, которое включает в себя его собственный файл javascript, но у меня проблема с использованием jQuery после использования templatetag render_block.

После создания нового проекта вот моя структура проекта:

project/
    apps/
        myapp/
    static/
        js/
            custom.js
    templates/
        base.html
        header.html
        menu.html
    __init__.py
    settings.py
    urls.py

base.html

{% load cms_tags menu_tags sekizai_tags staticfiles %}
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}This is my new project home page{% endblock title %}</title>
</head>
<body>
    <div>
        {% include "header.html" %}
        {% show_menu 0 100 100 100 "menu.html" %}
     </div>
    {% block content %}{% endblock content %}
    {% render_block "js" %}
    {% addtoblock 'js' %}
         <script type='text/javascript' src="{% static "js/bootstrap.min.js" %}"></script>
         <script type='text/javascript' src="{% static "js/custom.js" %}"></script>
    {% endaddtoblock 'js' %}
</body>
</html>

проект / приложение / MyApp / шаблоны / MyApp / home.html

{% extends CMS_TEMPLATE %}
{% load cms_tags sekizai_tags staticfiles %}

{% block title %}Home{% endblock title %}
{% block content %}{% endblock content %}

В home.html пока нет контента. Но содержимое из base.html отображается правильно. Проблема в custom.js, который использует jQuery.

custom.js

$(document).ready(function(){
    alert("Hi");
});

Оповещение никогда не всплывает, и я получаю сообщение "undefined не является функцией". Основная проблема, которая беспокоит меня, заключается в том, что jQuery включен в мой исходный код, но я не могу его использовать.

исходный код

<html>
...
<body>
    ....
    <script>
    var _jQuery = window.jQuery || undefined;
    var _$ = window.$ || undefined;
    </script>
    <script src="/static/cms/js/libs/jquery.min.js"></script>
    <script src="/static/cms/js/libs/class.min.js"></script>
    <script src="/static/cms/js/modules/jquery.ui.custom.js"></script>
    <script src="/static/cms/js/modules/jquery.ui.nestedsortable.js"></script>
    <script src="/static/cms/js/modules/cms.base.js"></script>
    <script src="/static/cms/js/modules/cms.modal.js"></script>
    <script src="/static/cms/js/modules/cms.sideframe.js"></script>
    <script src="/static/cms/js/modules/cms.clipboard.js"></script>
    <script src="/static/cms/js/modules/cms.plugins.js"></script>
    <script src="/static/cms/js/modules/cms.structureboard.js"></script>
    <script src="/static/cms/js/modules/cms.toolbar.js"></script>
    ...
    <script type='text/javascript' src="/static/js/custom.js"></script>
</body>
</html>

Очевидно, что {% render_block "js" %} работает нормально, но я обнаружил, что из-за этого CMS.$ Будет передан за $. Из-за этого я добавил:

<script> $ = CMS.$ </script> 

на вершине моего addtoblock:

{% addtoblock 'js' %}
    <script>$=CMS.$</script>
    <script type='text/javascript' src="{% static "js/bootstrap.min.js" %}"></script>
    <script type='text/javascript' src="{% static "js/custom.js" %}"></script>
{% endaddtoblock 'js' %}

Моя проблема с предупреждением была решена, но Bootstrap все еще сообщает, что нет jQuery:

JavaScript Bootstrap требует jQuery

Добавление jQuery в addtoblock может решить проблему, но тогда в моем исходном коде будет два одинаковых файла jQuery, и это не нужно. Что мне здесь не хватает?

1 ответ

Решение

Быстрый взгляд на источник начальной загрузки говорит мне, что они проверяют jQueryне $, Попробуйте изменить свой <script>$ = CMS.$</script> в <script>jQuery = CMS.$</script>,

Однако имейте в виду, что jQuery CMS будет загружен только в том случае, если панель инструментов активна, как, например, только для вошедших в систему сотрудников.

Другие вопросы по тегам