递归URL模式CMS样式

bko*_*rte 9 django django-urls

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

我正在学习Python和Django,我一直在制作一个能够选择正确页面的URL模式.

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

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

哪个适合网址,如:

http://localhost:8000/page/
Run Code Online (Sandbox Code Playgroud)

现在,我不确定是否可以让Django的URL系统返回一个slu a ala列表:

http://localhost:8000/parent/child/grandchild/
Run Code Online (Sandbox Code Playgroud)

将返回父母,孩子,孙子.

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

我在这里先向您的帮助表示感谢.

Ach*_*nol 13

那是因为你的正则表达式不允许中间'/'字符.url段模式的递归定义可能是可能的,但无论如何它将作为块传递给您的视图函数.

试试这个

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

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

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