9

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

我正在学习 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 数据?

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

4

1 回答 1

13

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

尝试这个

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

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

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

于 2009-07-02T02:29:58.267 回答