使用Django RGBField找不到jQuery

问题描述 投票:0回答:2

我正在研究的项目使用了一个RGBField,它将这个脚本插入到模板中(因为我无法找到它所在的位置,所以在某个地方的django深处):

<script type="text/javascript">
                (function($){
                    $(document).ready(function(){
                        $('#id_color').each(function(i, elm){
                            // Make sure html5 color element is not replaced
                            if (elm.type != 'color') $(elm).colorPicker({"colors": ["f1c40f", "2ecc71", "9b59b6", "e74c3c", "34495e", "3498db", "1abc9c", "f39c12", "d35400"]});
                        });
                    });
                })('django' in window && django.jQuery ? django.jQuery: jQuery);
            </script>

在控制台中我收到一个错误:Uncaught ReferenceError: jQuery is not defined我无法检查错误发生的位置,但删除RGBField可以防止出现问题。

在项目中使用Jquery,如果我在模板中使用jQuery,它工作正常(因此模板本身不是问题)。

我已经将django-jquery添加到项目中,并在模板的开头包含了{% load staticfiles %}。不解决问题。

我一直在忽略整件事,但现在我需要用这个页面编写一个cypress测试,错误阻止了测试。

柏树有办法忽略这个错误吗?或者有没有办法防止错误发生在一开始? RGBField是否有一个标志可以关闭jquery的检查?

运行'django' in window会产生false,并且运行django.jQuery会产生错误。运行'django' in window && django.jQuery产生false所以理论上这应该采取第二个选项,当我在控制台中运行时很好(但显然我遗漏了一些东西)。

编辑:

已安装的应用列表:

'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.humanize',
'whitenoise.runserver_nostatic',
'storages',
'django.contrib.staticfiles',
'django.contrib.flatpages',
'jquery',
'django.contrib.sites',
'django_activeurl',
'webpack_loader',
'widget_tweaks',
'argonauts',
'rest_framework',
'main',
javascript jquery python django cypress
2个回答
0
投票

该错误很可能与这行代码有关:

'django' in window && django.jQuery ? django.jQuery: jQuery

理解和考虑ternary conditional可能会有所帮助。

开箱即用,Django Admin在全局窗口上设置了一个'django'变量,并将jQuery引入它。这是因为管理员使用了jQuery。在管理员之外,在自定义模板中,由开发人员决定如何在需要时包含jQuery。

所以语句'django' in window && django.jQuery将在Django Admin页面和三元组的“真实”方面评估true,该片段继续并引用它。或者在三元组的假方面,假设jQuery已经出现在全球范围内。然后将对jQuery的引用作为参数传递给IIFE

我会仔细查看您的页面源,以确定是否/在哪里引用jQuery模块,并确保在该片段之前正确加载它。


0
投票

默认情况下,当抛出未捕获的异常时,赛普拉斯会失败测试。这种行为对许多用户都很有用,并且经常会向开发人员发出他们不知道的错误。

话虽这么说,有时会抛出未捕获的异常并且您想忽略它并继续进行测试(特别是如果它是从第三方插件中抛出的)。你可以通过using Cypress events来做到这一点。

要关闭所有未捕获的异常处理:

Cypress.on('uncaught:exception', (err, runnable) => {
   // returning false here prevents Cypress from failing the test
   return false
})

您可能希望在支持文件(cypress/support/index.js)中执行此操作,以便将其应用于所有规范文件。

© www.soinside.com 2019 - 2024. All rights reserved.