Django使用include引入子路由时如何定位调用index等对应视图函数
Django的路由匹配遵循「根路由先匹配前缀,子路由匹配剩余路径」的逻辑,完整匹配流程如下:
- 先匹配项目根路由
mysite/urls.py的urlpatterns列表
Django会把用户请求的URL和urlpatterns里的规则从上到下逐一比对,当请求路径以polls/开头时,就会命中path('polls/', include('polls.urls'))这条规则。此时Django会把路径中已经匹配成功的polls/前缀截断,把剩下的路径部分交给polls/urls.py的子路由列表继续匹配。 - 子路由匹配截断后的剩余路径
比如你在polls/views.py里新增了一个自定义视图:
def custom_view(request): return HttpResponse("这是新增的自定义视图")
之后你需要在polls/urls.py的urlpatterns里补充对应的路径规则:
urlpatterns = [ path('', views.index, name='index'), path('custom/', views.custom_view, name='custom_view'), ]
此时如果用户请求/polls/,截断polls/之后剩余的是空字符串,会匹配到第一条path('',...)规则,调用index函数;如果用户请求/polls/custom/,截断后剩余的是custom/,会匹配到第二条规则,调用你新增的custom_view函数。
还有两个需要注意的匹配规则:
- 所有路由规则都是按从上到下的顺序匹配的,只要匹配到第一条符合的规则就会立刻停止,不会继续校验后面的规则
- 如果路径规则里定义了动态参数,匹配到的参数会自动传入对应的视图函数作为入参
内容的提问来源于stack exchange,提问作者duskdusk13
相关产品推荐
相关产品推荐

