【问题标题】:Recursive URL Patterns CMS Style递归 URL 模式 CMS 样式
【发布时间】:2010-11-07 12:12:40
【问题描述】:

每当我学习一门新的语言/框架时,我总是会制作一个内容管理系统...

我正在学习 Python 和 Django,但我一直坚持制作一个可以选择正确页面的 URL 模式。

例如,对于单级 URL 模式,我有:

url(r'^(?P<segment>[-\w]+)/$', views.page_by_slug, name='pg_slug'),

这非常适合以下网址:

http://localhost:8000/page/

现在,我不确定是否可以让 Django 的 URL 系统带回 slugs ala 列表:

http://localhost:8000/parent/child/grandchild/

将返回父母、孩子、孙子。

那么这是 Django 已经做过的事情了吗?或者我是否修改我的原始 URL 模式以允许使用斜杠并在那里提取 URL 数据?

提前感谢您的帮助。

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    那是因为您的正则表达式不允许中间的“/”字符。 url 段模式的递归定义可能是可能的,但无论如何它都会作为一个块传递给您的视图函数。

    试试这个

    url(r'^(?P<segments>[-/\w]+)/$', views.page_by_slug, name='pg_slug'),
    

    并将传递给page_by_slug() 的segments 参数用'/' 分开,然后你将得到['parent', 'child', 'grandchild']。我不确定您是如何组织页面模型的,但如果它不是很复杂,请考虑使用或改进已包含在 Django 中的 flatpages 包。

    请注意,如果您有其他类型的 url 不表示用户生成的页面而是系统自己的页面,则应将它们放在您列出的模式之前,因为 Django 的 url 匹配机制遵循给定的顺序。

    【讨论】:

      猜你喜欢
      • 2014-09-19
      • 2014-01-12
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2012-09-20
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多