2014-11-10 1 views
0

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

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

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"); 
}); 

сообщение оповещения никогда не всплывал, и я получаю сообщение "неопределенные не является функцией". Основная проблема, которая беспокоит меня, заключается в том, что 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 все еще сообщает, что Ther не JQuery:

Для использования JavaScript в Bootstrap требуется jQuery

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

ответ

1

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

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

+0

Благодарим вас за внимание, на самом деле это решило мою проблему с двумя файлами jQuery. – Sasa