我正在研究包含其自定义javascript文件的DjangoCMS应用程序,但在使用templatetag render_block后使用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中的内容正确呈现。 问题出现在使用jQuery的 custom.js 中。
custom.js
$(document).ready(function(){
alert("Hi");
});
警报消息永远不会弹出,我收到消息“undefined is is a function”。 困扰我的主要问题是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:
Bootstrap的JavaScript需要jQuery
在addtoblock
中添加jQuery可以解决问题,但是我的源代码中会有两个相同的jQuery文件,这是不必要的。
我在这里缺少什么?
答案 0 :(得分:1)
快速浏览一下bootstrap源会告诉我他们检查jQuery
,而不是$
。尝试将<script>$ = CMS.$</script>
更改为<script>jQuery = CMS.$</script>
。
但是,请注意,只有在工具栏处于活动状态时才会加载CMS jQuery,例如,仅适用于已登录的员工用户。