Python 为什么不';t在django检查字符串结尾时不包括url正则表达式

Python 为什么不';t在django检查字符串结尾时不包括url正则表达式,python,django,django-urls,Python,Django,Django Urls,假设您有一个完整的urllocalhost:thisdir/callview/ 我注意到,在URL.py文件中,包含的名称空间写为: (r'^thisdir/', include('thisdir.urls', namespace='thisdir)), 检查开始字符串,但不检查结束,视图调用按以下方式完成: (r'^callview/$', 'thisdir.views.index', name='myview') 使用$检查字符串的结尾。如果include模式从完整url中断开“this

假设您有一个完整的url
localhost:thisdir/callview/

我注意到,在URL.py文件中,包含的名称空间写为:

(r'^thisdir/', include('thisdir.urls', namespace='thisdir)),
检查开始字符串,但不检查结束,视图调用按以下方式完成:

(r'^callview/$', 'thisdir.views.index', name='myview')
使用$检查字符串的结尾。如果include模式从完整url中断开“thisdir/”以首先检查该部分,并且我认为它会一次检查每个字符串部分(因此“thisdir/”位于字符串的末尾),为什么我从未看到
(r'^thisdir/$,…)

谢谢

请注意,本例中的正则表达式没有$(字符串结尾匹配字符),但包含尾部斜杠。每当Django遇到include()(Django.conf.urls.include())时,它就会删除与该点匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf进行进一步处理

如果使用
$
终止包含,则该规则将不再匹配包含文件中的任何内容,因为它将只匹配以include regex结尾的URL

您从未看到它的原因是,它会阻止URL包含的用途

(r'^thisdir/$,)
由于终止的
$
,这将只匹配等于
thisdir/
的URL。因此,像
thisdir/foobar/
这样的url将不匹配,并且永远不会被include处理


另一方面,如果将
$
保留在正则表达式之外,
/thisdir/
将与正则表达式匹配,因此可以通过包含的URL进行进一步处理。

如果传递给名称空间的所有内容都是空的,那么名称空间中有什么意义
thisdir.URL
应该处理URL的其余部分。这样,单个正则表达式就可以匹配“thisdir/whateveryouwant”和“thisdir/otherstuff”,而不是打断它,只查看“thisdir/”,然后当您移动到它包含的文件时,它会打断“thisdir/”,只查看“foobar/this”、“foobar/that”等等