我有一个页面模型,其中包含自己的实例作为可能的父页面。所以每一页都可以成为另一页的子页面。我想要做的是获得绝对的URL给我链接,根据其父体系结构进行结构化。假设我有一个带有BBB的页面AAA,它本身有一个孩子CCC。最后一个孩子的网址是mysite.com/AAA/BBB/CCC。我玩过并想出了一个适用于我的递归方法,但是我解决了网址时遇到了一堵砖墙。如何从父实例递归获取绝对URL?
models.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})
urls.py
url(r'^(?P<path>.+)(?P<slug>[\w-]+)/$', views.page, name='details'),
测试它,向我展示了这条道路,我得到给出了路径的正确的家长组成部分。但解决网址似乎并没有工作,我认为这与逆向和/或正则表达式有关。使用任何页面链接,即使在404应该是,现在会给我输入错误。
TypeError at /###/###/
page() got an unexpected keyword argument 'path'
我在做什么错了?
编辑:
views.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)
请发表您的' views.page'视图。 –
是的,这似乎与您的get_absolute_url方法或您发布的任何代码没有任何关系。 –
@vishes_shell发布了更新 – Ablivion