每当我学习一门新的语言/框架时,我总是建立一个内容管理系统......
我正在学习Python& Django和我一直在制作一个能够选择正确页面的URL模式。
例如,对于单级URL模式,我有:
url(r'^(?P<segment>[-\w]+)/$', views.page_by_slug, name='pg_slug'),
对于像以下网址一样有效:
http://localhost:8000/page/
现在,我不确定我是否可以让Django的URL系统带回一个slu a ala列表:
http://localhost:8000/parent/child/grandchild/
将返回父母,子女,孙子。
这就是Django已经做过的事情了吗?或者,我是否可以修改原始URL模式以允许斜杠并在那里提取URL数据?
感谢您的帮助。
答案 0 :(得分:13)
那是因为你的正则表达式不允许中间'/'字符。 url segment pattern的递归定义可能是可能的,但无论如何它都会作为一个块传递给你的view函数。
试试这个
url(r'^(?P<segments>[-/\w]+)/$', views.page_by_slug, name='pg_slug'),
并将segments
参数传递给page_by_slug()
“/”,然后您将获得['parent', 'child', 'grandchild']
。我不确定你是如何组织页面模型的,但是如果它不是很复杂,可以考虑使用或改进已经包含在Django中的 flatpages 包。
请注意,如果您有其他类型的网址并不表示用户生成的网页而是系统自己的网页,则应将它们放在您列出的模式之前,因为Django的网址匹配机制遵循给定的顺序。