我有一个页面模型,它包含自己的实例作为可能的父页面。所以每个页面都可以是另一个页面的子页面。我想要做的是获取绝对 url,以给我根据其父架构构建的链接。因此,假设我有一个带有子 BBB 的页面 AAA,它本身有一个子 CCC。最后一个孩子的网址是 mysite.com/AAA/BBB/CCC。我已经玩过并想出了一个适合我的递归方法,但是我在解析网址时遇到了障碍。
模型.py
class Page {
...
parent = models.ForeignKey('self', null=True, blank=True, unique=False)
....
def get_parent_path(self, list=None):
parenturl = []
if list is not None:
parenturl = list
if self.parent is not None:
parenturl.insert(0,self.parent.slug)
return self.parent.get_parent_path(parenturl)
return parenturl
def get_absolute_url(self):
path = ''
if self.parent is not None:
parentlisting = self.get_parent_path()
for parent in parentlisting:
path = path + parent + '/'
path = path + self.slug;
return reverse("pages:details", kwargs={"path": path, "slug": self.slug})
网址.py
url(r'^(?P<path>.+)(?P<slug>[\w-]+)/$', views.page, name='details'),
测试它,向我展示了我得到的路径给出了路径的正确父母部分。但是解析网址似乎不起作用,我认为它与反向和/或正则表达式有关。使用任何页面链接,即使应该是 404,现在都会给我类型错误。
TypeError at /###/###/
page() got an unexpected keyword argument 'path'
我究竟做错了什么?
编辑:
视图.py
def page(request, slug):
instance = get_object_or_404(Page, slug=slug)
context = {
"title": instance.title,
"page": instance,
}
return render(request, "page.html", context)