W to:得到上一个或下一个兄弟姐妹

nil*_*ils 5 python django wagtail

我正在创建一个wagtail的页面,我需要知道当前页面的上一个和下一个兄弟:

在我的肖像页面模型中,我试图定义两种方法来找到正确的网址,但我错过了一个关键部分.为了得到第一个兄弟姐妹,我可以做以下事情:

class PortraitPage(Page):

    ...

    def first_portrait(self):
        return self.get_siblings().live().first().url
Run Code Online (Sandbox Code Playgroud)

first()last()方法,但似乎没有一个next()previous()方法来获得直接邻居(按照他们在wagtail管理员安排的顺序).

有没有办法实现这个目标?

Dan*_*ley 7

Django的树胡提供get_next_siblingget_prev_sibling这将树返回你的兄弟姐妹直接,但这些并不一定是你的下一个公布的兄弟姐妹.要申请那些你可以使用:

prev = page.get_prev_siblings().live().first()
next = page.get_next_siblings().live().first()
Run Code Online (Sandbox Code Playgroud)

显然,它也可以与任何其他查询集操作链接.

  • 有什么方法可以在 Django 模板中实现相同的结果吗? (2认同)

nil*_*ils 5

通过调试器一段时间后,我发现 wagtail 已经有两个方法:get_prev_sibling()get_next_sibling()

所以这些方法可能看起来像这样(考虑到前一个方法中的第一页和下一个方法中的最后一项):

def prev_portrait(self):
    if self.get_prev_sibling():
        return self.get_prev_sibling().url
    else:
        return self.get_siblings().last().url

def next_portrait(self):
    if self.get_next_sibling():
        return self.get_next_sibling().url
    else:
        return self.get_siblings().first().url
Run Code Online (Sandbox Code Playgroud)