无法使嵌套名称空间成为django网址的最佳做法

时间:2013-05-23 13:06:41

标签: python django url

我无法创建嵌套的命名空间,就像每次我超过1级时都会在https://docs.djangoproject.com/en/1.4/topics/http/urls/中显示的那样我失去了所有其他命名空间有没有人成功使用过这个,如果有的话,什么是django的最佳实践网址。

urlpatterns_3rd_level = patterns('example.basket.views', url(r'^3rd$', 'home', name='home'))
urlpatterns_2nd_level = patterns('', url(r'^2nd$', include(urlpatterns_3rd_level, namespace='basket')))

urlpatterns = patterns('', url(r'^1st$', include(urlpatterns_2nd_level, namespace='store')))

reverse('store:basket:home') # No namespace named basket

1 个答案:

答案 0 :(得分:1)

看起来你可以更深入了,因为你用美元符号$完成了正则表达式。发生这种情况时,Python会将其识别为表达式的结尾并停止匹配后面的任何内容,这可能会产生Url not found或您未请求的其他页面。

请注意,每次他们在文档中使用include时,正则表达式都没有$符号,因为通常您不希望在包含的URL中结束表达式。

您的示例可能没有$这样的标志:

urlpatterns_3rd_level = patterns('example.basket.views', url(r'^3rd$', 'home', name='home'))
urlpatterns_2nd_level = patterns('', url(r'^2nd', include(urlpatterns_3rd_level, namespace='basket')))

urlpatterns = patterns('', url(r'^1st', include(urlpatterns_2nd_level, namespace='store')))

reverse('store:basket:home') # No namespace named basket

提示:仔细检查example.basket.views是否是您应用中的有效模块,因为错误可能是该模块不存在。

从shell中我测试了它并且它产生了:

>>> '/1st2nd3rd'

希望这有帮助!

相关问题