【问题标题】:Can't make nestednamespaces what are the best practices for django urls无法制作嵌套命名空间 django url 的最佳实践是什么
【发布时间】:2013-05-23 13:06:41
【问题描述】:

我无法创建嵌套命名空间,就像它们在 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

【问题讨论】:

    标签: python django url


    【解决方案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-11-18
    • 1970-01-01
    • 2014-01-23
    • 2021-01-06
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多