假设您有一个完整的网址localhost:thisdir/callview/
我注意到在urls.py文件中,包含的命名空间写为:
(r'^thisdir/', include('thisdir.urls', namespace='thisdir)),
其中检查起始字符串但不结束,并且视图调用完成如下:
(r'^callview/$', 'thisdir.views.index', name='myview')
使用$来检查字符串的结尾。如果include模式在完整url中打破“thisdir /”以首先检查该部分,并且我认为它一次检查每个字符串部分(所以“thisdir /”在字符串的末尾)为什么我从未看到{ {1}}
谢谢
答案 0 :(得分:9)
https://docs.djangoproject.com/en/1.8/topics/http/urls/
请注意,此示例中的正则表达式没有$(字符串结尾匹配字符),但包含尾部斜杠。每当Django遇到include()(django.conf.urls.include())时,它会切断匹配到该点的URL的任何部分,并将剩余的字符串发送到包含的URLconf以进行进一步处理。
如果您使用$
终止了包含,那么该规则将不再匹配所包含文件中的任何内容,因为它只匹配以恰好包含正则表达式结尾的网址。
你永远不会看到它的原因是因为它会阻止URL包含的目的。
(r'^thisdir/$', <include>)
由于终止thisdir/
,仅匹配的网址等于$
。因此,thisdir/foobar/
等网址将不匹配,且永远不会被包含。
另一方面,如果您将$
从正则表达式中删除,/thisdir/<anything>
将与正则表达式匹配,因此可以通过包含的网址进一步处理。