0

我无法创建嵌套命名空间,就像它们在https://docs.djangoproject.com/en/1.4/topics/http/urls/中呈现的那样,每次我超过 1 个级别时,我都会丢失所有其他命名空间有没有人成功有了这个,如果是这样,django 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
4

1 回答 1

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'

希望这可以帮助!

于 2013-05-23T13:26:53.333 回答