在Django中,当我不知道在哪里设置跟踪时,如何触发pdb来找出导致404的原因?

时间:2012-08-28 02:16:44

标签: django debugging

在我的Django应用程序中,我收到了404 Page Not Not响应,看起来它是由我的一个自定义模板标签中的某些逻辑引起的 - 但我不知道哪一个。

使用Django Debug Toolbar的Request Vars面板,我可以看到导致404的视图为go_back.utils._register_wrapped_view - 这就是我所知道的来自我的go_back.utils模板标签之一。

不幸的是,因为模板标签需要进行装饰,因此显示为_registered_wrapped_view,我无法确定它是哪个标签,更不用说标签代码在问题发生的位置。 (标记代码是一个特殊的实用程序,可以在几个地方使用网址并调用resolve,所以它并不明显。)

因此我不能使用正常的import pdb; pdb.set_trace()方法,因为我不知道在哪里设置跟踪。

那么如何在404发生时让pdb中断,这样我才能看到通向该点的堆栈跟踪?

3 个答案:

答案 0 :(得分:0)

尝试使用Django Debug Toolbar,它可以拦截重定向,适用于无法找到断点的位置。

在设置中确保您有

DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': True}

答案 1 :(得分:0)

旧问题,但有django-pdb,其中包含runserver的post mortem标志。它看起来没有很好的维护(2年前是最后一次提交),但它是简单的中间件,更新它不应该太难。

答案 2 :(得分:-1)

我不确定你是否知道这一点:

您可以尝试将import pdb; pdb.set_trace()放在要调试的功能和开发服务器中。当该函数触发时,它将进入pdb shell,您可以调试代码。