我在Django中如何形成一个URL?
我很绝望,求助啊。愿意为食物工作 :)
我想要在以下网址上有页面,并且希望能通过这些网址来查找页面(也就是说,如果有人访问某个网址,我想检查那里是否有页面)。
mysite.com/somepage/somesubpage/somesubsubpage/ mysite.com/somepage/somesubpage/anothersubpage/ mysite.com/somepage/somesubpage/somesubpage/ mysite.com/somepage/somepage/
注意,我希望每个页面的“slug”(也就是网址的一部分,比如某个页面的名字)可以重复使用(例如,somepage/somepage)。当然,每个“slug”在它的层级中必须是唯一的(也就是说,不能有两个页面分别是 mysite.com/somepage/other/ 和 mysite.com/somepage/other/,因为它们实际上是同一个页面)。那么,有什么好的方法来实现这个呢?我尝试把一个页面的“slug”(比如'somesubpage')存储在一个叫做'slug'的字段里,并让每个“slug”在它的父页面下是唯一的,这样就不会出现上面的情况。问题是,如果我想通过“slug”来查找一个页面(比如'somepage'),而恰好在 mysite.com/other/somepage/ 和 mysite.com/page/somepage/ 都有一个页面,那我的应用程序怎么知道该获取哪一个呢(因为它们都有相同的“slug” 'somepage')。
2 个回答
听起来你在找一个内容管理系统(CMS)应用。这里有一个关于几种基于Django的CMS的对比。如果你想要一个功能齐全的CMS作为你项目的核心,DjangoCMS 2或者django-page-cms可能会很合适。如果你更喜欢一个支持基本CMS功能,但大部分时间会让你走一些弯路的CMS,feincms可能值得一看。
补充一下,比较页面上的大多数CMS都使用了Daniel提到的django-mptt。
你还需要存储 level
和 parent
这两个属性,这样你才能始终找到正确的对象。
存储层级数据的需求非常常见,我总是推荐使用 django-mptt。这是一个在Django中实现的高效算法,用于在数据库中存储层级数据。我在多个项目中使用过它。简单来说,除了存储层级和父级信息,它还为每个对象存储了 left
和 right
,这样就能唯一地描述整个树形结构及其所有子元素。项目主页上有一些解释性的链接。