0

我有一个页面模型,它包含自己的实例作为可能的父页面。所以每个页面都可以是另一个页面的子页面。我想要做的是获取绝对 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)
4

1 回答 1

1

所以首先你的page观点是不接受path争论。

您需要更改def page(request, slug):def page(request, slug, path):. 此外,您需要重新考虑是否需要在您的网址和视图中使用该参数,因为您不使用它。

进一步的部分可能不相关

还有一件事,你忘了把/参数放在 url 之间

url(r'^(?P<path>.+)(?P<slug>[\w-]+)/$', views.page, name='details'),

应该

url(r'^(?P<path>.+)/(?P<slug>[\w-]+)/$', views.page, name='details')
于 2016-09-22T19:02:21.367 回答