【问题标题】:DjangoCMS Sekizai {% render_block "js" %} disable usage of jQueryDjangoCMS Sekizai {% render_block "js" %} 禁用 jQuery
【发布时间】:2015-01-06 17:06:54
【问题描述】:

我正在开发 DjangoCMS 应用程序,其中包括其自定义 javascript 文件,但在使用 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>

project/apps/myapp/templates/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");
});

警告消息永远不会弹出,我收到消息“未定义不是函数”困扰我的主要问题是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 文件,这是不必要的。 我在这里错过了什么?

【问题讨论】:

    标签: jquery django django-cms django-templates django-sekizai


    【解决方案1】:

    快速浏览一下引导源代码告诉我他们检查的是jQuery,而不是$。尝试将您的 &lt;script&gt;$ = CMS.$&lt;/script&gt; 更改为 &lt;script&gt;jQuery = CMS.$&lt;/script&gt;

    但是,请注意,只有在工具栏处于活动状态时才会加载 CMS jQuery,例如,仅适用于已登录的员工用户。

    【讨论】:

    • 感谢您的留言,实际上这解决了我的两个 jQuery 文件问题。
    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2017-11-12
    • 2012-06-27
    • 2018-03-27
    • 2014-12-31
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多