django - 在包含的模板中时 javascript 不起作用

Posted

技术标签:

【中文标题】django - 在包含的模板中时 javascript 不起作用【英文标题】:django - javascript not working when in an included template 【发布时间】:2016-02-19 16:24:33 【问题描述】:

我在 django 中有一个名为 base.html 的模板,它通过 % include 'gui/page.html' % 调用另一个模板

在该模板中,我有以下 javascript,它允许在设置时选择整个文本字段,例如 <p>This text I will select all</p>

<script>
$(document).ready(function()

     $('p').dblclick(function(e)

         $(this).selectText();
             e.preventDefault();

         );

         );
         jQuery.fn.selectText = function()
             this.find('input').each(function() 
                if($(this).prev().length == 0 || !$(this).prev().hasClass('p_copy'))  
                   $('<p class="p_copy" style="position: absolute; z-index: -1;"></p>').insertBefore($(this));
                
            $(this).prev().html($(this).val());
        );
        var doc = document;
        var element = this[0];
            console.log(this, element);
            if (doc.body.createTextRange) 
                var range = document.body.createTextRange();
                range.moveToElementText(element);
                    range.select();
             else if (window.getSelection) 
                var selection = window.getSelection();        
                var range = document.createRange();
                    range.selectNodeContents(element);
                    selection.removeAllRanges();
                    selection.addRange(range);
    
;
</script>

如果我直接访问模板@@http://localhost/gui/page.html,则 javascript 可以工作,但如果我通过http://localhost/base.html 访问它,则双击该字段不会执行任何操作。

我已经尝试在 base.html 中包含 javascript,但它仍然无法加载。通过包含的模板调用时django如何加载javascript?

【问题讨论】:

您是否验证了打开base.html 时包含gui/page.html 的内容?您是否已在浏览器中查看源代码以确保 javascript 存在?根据您使用的 URL,Apache(或您的其他服务器)似乎正在静态地提供文件 base.html,而不是允许 django 提供文件,在这种情况下,模板未被处理且不包括 gui/page.html。您的网络服务器是如何设置的? 奇怪,所以我拿了&lt;script&gt;&lt;/script&gt;标签并将内容放入js/scripts.js文件中,它可以工作。 听起来你的 django 应用程序没有运行。您需要从您的 django 项目目录或 mod_wsgi 或 gunicorn 调用 python manage.py runserver 来运行您的 django 项目。你在用这些吗? 什么?是的,应用程序正在运行。如果它没有运行,我将无法浏览该站点....无论如何,它正在工作。正如我所说,我将脚本放入一个静态文件并从那里加载。奇怪的是,如果我在 html 模板的标签中有脚本,它不会加载它。 你是如何启动 Django 应用程序运行的? 【参考方案1】:

刚刚遇到同样的问题。为了解决它,接下来要做的是:

    在base.html中添加:

    所有基本脚本,比如我们

    &lt;script src="https://code.jquery.com/jquery-1.12.4.js"&gt;&lt;/script&gt;

    添加块,例如:

    % block extrascripts %% endblock %

    把你的手稿发到/static/js/hand_made.js

    包含在child 模板中,即我们在% include 'child_template.html' % 中使用的模板:

    在顶部添加% load staticfiles % 在中间添加您的 html 最后添加

    % block extrascripts %&lt;script type="text/JavaScript" src="% static 'js/hand_made.js' %"&gt;&lt;/script&gt;% endblock %(由于某种原因无法添加漂亮的样式)。

如果由于某些原因需要将模板中的数据提供给 JS,则需要进行下一步:

% block extrascripts %
    <script>
        var my_var_1 = " some_template_data.var_1 ",
            my_var_2 = " some_template_data.var_12 ";
    </script>
    <script type="text/JavaScript" src="%  static 'js/hand_made.js' %"></script>
% endblock %

在这种情况下,my_var_1my_var_2 将在 hand_made.js 中可用

【讨论】:

【参考方案2】:

Django 不会修改或加载模板中的任何 javascript。它只会将其传递给输出。

【讨论】:

抱歉,我确实在 HTML 上的 include 周围有引号,所以我更新以显示这一点。我的理解是我在 page.html 中的 javascript 即使在包含标签上也应该可以工作,但它不能。我如何得到它?

以上是关于django - 在包含的模板中时 javascript 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板破坏 DataTable

django 表单:如何检查模板中的复选框状态

如何告诉我的 django 模板静态文件(dajax.core.js)在哪里?

选中时,jQuery自动完成填充另一个字段

Django,如何将变量从 Django 管理员传递到模板?

Django使用模板后无法找到静态资源文件