【问题标题】:django-debug-toolbar Not Working with jQuery in Django Web Sitedjango-debug-toolbar 在 Django 网站中不使用 jQuery
【发布时间】:2014-08-28 04:01:36
【问题描述】:

我正在使用django-debug-toolbar(最新版本,v1.2.1)并且我在控制台中不断收到此错误:

Empty string passed to getElementById()

对于 jQuery 中的这段代码(第 2757 行):

...
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
...

我单击的调试工具栏中的每个链接都会再次出现此警告。

当我注释掉我的主要 jQuery 源文件时,调试工具栏会起作用。另外,在 Django admin 中,它运行良好,大概是因为 Django admin 使用了不同的获取 jQuery 的方法。

我尝试了@Carlton Gibson 的回答,但这并不能解决我的问题。我也尝试过本地 jQuery 和 CDN 以及几个不同的版本,但都无济于事......

我尝试了不同版本的 jQuery,并使用了django-debug-toolbar 文档中提供的所有可能设置。我被困住了,我真的很喜欢这个工具并希望它为我工作。

编辑

由于我收到了一些额外的 cmets 和答案,我想我会进行编辑以解释我尝试过的内容。我尝试了所有建议都没有成功。但是,目前,我从另一篇关于 RequireJS 和 django-debug-toolbar 的帖子中发现了另一个错误:

GET http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js [HTTP/1.1 304 Not Modified 133ms]
ReferenceError: jQuery is not defined localhost:8000:119
TypeError: djdt is undefined toolbar.js:297
Empty string passed to getElementById()

即使 jQuery 已加载并且我告诉 django-debug-toolbar 使用我的版本(使用 DEBUG_TOOLBAR_CONFIG = { 'JQUERY_URL': '', }),我仍然收到错误并且 DjDT 无法正常工作。这一次,因为TypeError,它甚至没有出现。

编辑

这里是 base.html 中导入 JS 的块。请记住,这是一个快照,它已经发生了很大变化。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js" defer></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js" defer></script>

我还有一个我正在使用的返回顶部小部件,这可能是罪魁祸首。由于我使用此代码已经很长时间了,所以我从不认为这是一个问题,但现在我怀疑它可能是。此外,由于该错误与id 有关并且脚本使用class,因此我将其关闭。但是当我注释掉它时,DjDT 就可以工作了。

借助此处的帖子,我解决了这个问题。不确定它与id 的关系如何,但我在使用a 选择器的返回顶部小部件中存在冲突。我更改为class,它正在工作。我在两个项目中进行了测试,它似乎是固定的。感谢大家的帮助!

【问题讨论】:

  • 你的网站/项目是否碰巧使用了 RequireJS?
  • 不是故意的...在关注的项目中使用的唯一库是 Bootstrap 和 jQuery...
  • 我提到这个的原因是目前有一个错误报告:github.com/django-debug-toolbar/django-debug-toolbar/issues/605。它建议设置 DEBUG_TOOLBAR_CONFIG = {'JQUERY_URL': None} 然后确保在 requireJS 之前加载 jQuery。
  • 另外,我是否有可能要求您显示相关的 base.html 模板部分,您在其中加载 CSS/JS 以用于 bootstrap/jQuery?
  • 是的,我看到了那个错误...有关代码,请参见 OQ...

标签: jquery django django-debug-toolbar


【解决方案1】:

不确定这是否适合您,但从 this answer 获得提示,尝试将以下内容添加到您的 settings.py 并查看它是否有效

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

这将有效地删除调试工具栏的所有检查,以确定它是否应该自行加载;它总是会加载。

既然您在comment 中提到您在&lt;/body&gt; 标记的底部导入jquery,请确保all your tags a closed;您的模板中可能缺少标签。此外,如果您出于性能考虑将 jquery 脚本标签放在底部,您可以考虑使用async or defer

编辑 1更多基于 cmets 的建议

您是否使用了 Firefox 或 chrome 等的扩展程序?检查this。 另外,请确保如果您通过“#”选择器进行查询——确保选择器是唯一的(应该是唯一的),否则您将在 FireFox 中出现this 错误。

我的猜测是,您的 html 中有一个带有一些 id 的元素,它也在 django-debug toolbar 的模板中使用,并且您正在使用 # 选择器查询它。

【讨论】:

  • 感谢您的建议。 django-debug-toolbar 实际上加载正常,只是单击面板不起作用(而是抛出上述错误)。我试过你的想法无济于事(但deferasync 方法无论如何都很好用)。我刚刚再次浏览了我的模板并确认所有标签都已关闭并且一切看起来都很好。这真的很奇怪,因为一旦我删除 jQuery,django-debug-toolbar 就会正确运行。
  • @nicorellius 更多建议:)。您是否使用 Firefox 或 chrome 等的任何扩展程序?检查this。另外,请确保如果您通过“#”选择器进行查询——确保选择器是唯一的(应该是唯一的),否则您最终会在 ff (link) 中遇到此错误
  • 好主意(让它们不断涌现)...我刚刚通过停用所有附加组件和扩展并再次测试 FF 来检查这一点。没有骰子。然后,我继续在 Chrome 和 Opera 中进行测试,但 DJDT 在其中任何一个中都不起作用。说真的,我正准备启动一个带有香草设置的虚拟机来测试它,因为它让我发疯。
  • @nicorellius 我的猜测是,您的 html 中有一个带有一些 id 的元素,该元素也用于 django-debug 工具栏的模板中,并且您正在使用 @ 查询它987654340@ 选择器。
  • 这是个好主意。问题是,这在我的许多项目中都必须是系统的,因为 DJDT 并没有在几个项目中工作。我现在正在寻找可能导致此冲突的 ID。谢谢。
【解决方案2】:

由于您已经在页面上安装了 jQuery,您可以告诉调试工具栏不要加载它的版本。尝试将此添加到您的设置中:

DEBUG_TOOLBAR_CONFIG = {
  'JQUERY_URL':'',
}

(请参阅config docs 了解更多信息。)

希望这足以解决您的问题。

【讨论】:

  • 感谢您的建议。我将此添加到我的本地设置文件中,它确实有效,例如,强制使用我的 jQuery 版本,但是当点击debug_toolbar 链接时仍然没有显示数据...同样的错误,Empty string passed to getElementById()
  • 嗯。好奇的。 > 这一次,我对我的代码进行了一些更改,认为它们不会产生影响......我只能问“你做了什么?” - 恢复它,看看它是否有效:)
  • 所以这个问题现在让我头疼不已...我现在有多个 Django 项目,有几个是新的,除了一个没有功能的 django-debug-toolbar在页面上加载了一个 jQuery 版本。我已经尝试了很多东西,所以我带着赏金回到这里。
  • @Carlton Gibson - RE:回溯以找到出错的地方。当我撕开那个寻找问题的特定项目时,这并没有帮助。我继续前进,并且已经开始了其他 Django 项目,我希望这些项目能够顺利完成。所有这一切的唯一共同点是我在模板底部附近导入 jQuery(在结束 &lt;/body&gt; 标记之前)......虽然,我在 &lt;head&gt; 中尝试过也无济于事。
猜你喜欢
  • 2013-01-15
  • 2021-07-15
  • 2022-08-13
  • 2011-07-04
  • 2011-08-05
  • 2012-05-18
  • 2016-04-08
  • 2011-07-12
  • 2015-05-13
相关资源
最近更新 更多