代码之家  ›  专栏  ›  技术社区  ›  Noufal Ibrahim

Django URL调试器

  •  24
  • Noufal Ibrahim  · 技术社区  · 14 年前

    我正在开发一个django应用程序,随着时间的推移,URL不断增长。我现在带了很多,由于我做了一些更改,一个视图开始出现故障。当我试图得到 http://example.com/foo/edit_profile ,它应该执行一个视图特定的视图函数 X 但它正在执行 Y 相反。在某个地方,URL路由混乱,我搞不清楚。我用过 django.core.urlresolvers.resolve 方法从shell中尝试它,我可以确认URL得到了错误的解析。但是,我不知道如何调试它并确定问题所在。

    理想情况下,我希望看到类似“测试这个模式”、“测试这个模式”等内容,直到它最终找到正确的模式,然后我可以查看它解决的地方。我找不到这样的东西。

    这不是大型项目的常见问题吗?人们做什么?

    更新

    我知道系统如何工作,以及如何逐个查看URL。这就是我要做的。这个问题基本上是在寻求捷径。

    4 回复  |  直到 14 年前
        1
  •  28
  •   Sergio Morstabilini    14 年前

    你已经试过跑步了吗

    manage.py show_urls
    

    安装后 django_extensions ?

    http://vimeo.com/1720508 -从06:58开始观看。

    这将为您提供尝试URL解析的顺序。

    希望这有帮助

        2
  •  3
  •   hughdbrown    14 年前

    我会对url.py中的模式进行注释,直到您尝试导航到 foo . 如果该模式是include,那么我将在该url.py中递归并注释掉行。最终,您将确切知道匹配的模式。

    然后我将使用它调用的视图函数和硬代码。如果它使用的是一个通用视图或一些微妙的东西,我会尽可能地使它明显和直接。此时,您应该知道哪个规则匹配,为什么匹配,以及它在视图中执行的代码。

        3
  •  0
  •   Rajeev J Sebastian    14 年前

    看看你的urlconfs,找出哪个urlpattern调用你的视图y,看看regexp是否比它应该的更通用。尝试对导致错误匹配的urlpattern进行注释,并查看它是否与x正确匹配。

    通常,这对我来说不是问题,但确实发生了。在常规模式之前,始终保持更具体的模式。使用静态前缀来划分URL命名空间,以防止错误匹配。

        4
  •  0
  •   Andre Bossard    14 年前

    您可以假定,它从上到下遍历urlpatterns,并且将执行第一个匹配的urlpatterns。

    正如您所知,执行的是哪个视图( Y )想想看:

    • 如果 Y 是以前 X :y的模式与URL匹配(但不应匹配)
    • 如果 X 是以前 Y :x的模式与URL不匹配(但应该匹配)

    您能提供一些更明确的URLCONF示例吗?我不能给你一个更明确的答案。