我在 Django url 方面遇到了问题,无法深入了解。我已尝试过此问题的答案中给出的建议,但没有帮助。
urlpatterns = [
...
path('duo/', include('duo.urls')),
path('users/', include('users.urls')),
]
duo/urls.py
urlpatterns = [
...
path('', include('users.urls')),
...
]
用户/urls.py
urlpatterns = [
path('', views.SelectPartner.as_view(), name='select-partner'),
...
]
当我使用网址http://192.168.1.138:8000/duo/时,我会进入该页面http://192.168.1.138:8000/accounts/login/?next=/duo/这是不存在的。
我无法想象这里发生了什么,因为项目中的任何地方都不存在accounts这个词
我可以使用一些工具来了解发生了什么吗?
我认为您忘记在 URL 中使用该应用程序,然后再使用其他参数。然后,如果您要使用身份验证,它将默认在 URL 中提供身份验证。
django/urls/resolvers.py 中插入断点。在 URLResolver.resolve() 中。我通常将其设置为 IDE 条件断点,以便执行不会在每个 HTTP 请求和 URL 模式上停止。就在 for pattern in self.url_patterns:
循环内部,我为唯一的 URL 路径、唯一的模式添加了一个条件断点 -
# if your IDE doesn't do conditional breakpoints, just add an if-
if 'unique_path_part' in path and 'unique_url_pattern' in str(self) and 'more_unique_stuff' in str(pattern):
# add breakpoint here, like [pudb](https://pypi.org/project/pudb/)
# e.g. import pudb; pu.db
Django 对于 URL 与任何模式不匹配的原因保持沉默,但这不一定是它的错。有时您必须使用断点来冻结时间才能了解 URL 或模式中的错误。我承认这很糟糕。但有时它非常有用,特别是对于刚接触 Django 的开发人员或遇到模式问题的开发人员(例如,在我的例子中,正则表达式略有偏差)