Python 摇摆:获得上一个或下一个兄弟姐妹
我正在使用wagtail创建一个页面,我需要知道当前页面的上一个和下一个同级: 在我的纵向页面模型中,我试图定义两种方法来查找正确的URL,但我缺少一个关键部分。要获得第一个兄弟姐妹,我可以执行以下操作:Python 摇摆:获得上一个或下一个兄弟姐妹,python,django,wagtail,Python,Django,Wagtail,我正在使用wagtail创建一个页面,我需要知道当前页面的上一个和下一个同级: 在我的纵向页面模型中,我试图定义两种方法来查找正确的URL,但我缺少一个关键部分。要获得第一个兄弟姐妹,我可以执行以下操作: class PortraitPage(Page): ... def first_portrait(self): return self.get_siblings().live().first().url {# This is a template #} P
class PortraitPage(Page):
...
def first_portrait(self):
return self.get_siblings().live().first().url
{# This is a template #}
Previous Sibling: {{ page.next_sibling }}
Next Sibling: {{ page.prev_sibling }}
有first()
和last()
方法,但似乎没有next()
或previous()
方法来获取直接邻居(按照它们在wagtail管理中的排列顺序)
有什么方法可以做到这一点吗?经过一段时间的调试,我发现wagtail已经有了两种方法:
get\u prev\u sibling()
和get\u next\u sibling()
因此,这些方法可以如下所示(说明前一种方法的第一页和下一种方法的最后一项):
提供get_next_sibling
和get_prev_sibling
,它们将返回树中的直接同级,但不一定是下一个发布的同级。要请求您可以使用的内容,请执行以下操作:
prev = page.get_prev_siblings().live().first()
next = page.get_next_siblings().live().first()
这显然也可以与任何其他queryset操作链接。这里有一个版本处理
未发布的同级
def下一幅肖像(自):
next\u sibling=self.get\u next\u sibling()
如果下一个兄弟姐妹和下一个兄弟姐妹.live:
返回next_sibling.url
其他:
下一个发布的兄弟姐妹=self.get下一个兄弟姐妹(
包含=错误
).live()
如果len(下一个发布的兄弟姐妹):
返回下一个\u已发布的\u同级[0]。url
返回self.get_同胞().live().first().url
def prev_肖像(自):
previous\u sibling=self.get\u prev\u sibling()
如果上一个兄弟姐妹和上一个兄弟姐妹.live:
返回上一个_sibling.url
其他:
上一个发布的兄弟姐妹=self.get上一个兄弟姐妹(
包含=错误
).live()
如果len(以前发布的兄弟姐妹):
返回以前发布的兄弟姐妹[0]。url
返回self.get_同胞().live().last().url
您可以在类中定义继承自页面的属性
兄弟姐妹
如果您想要页面
实例的同级,可以使用以下选项(基于Danielle Madeley的回答):
同班兄弟姐妹
如果您想要查看肖像页面的同级
,请在类型
方法中指定self.\uuuuu class\uuuu
,如下所示:
class PortraitPage(Page):
# ...
@property
def next_sibling(self):
return self.get_next_siblings().type(self.__class__).live().first()
@property
def prev_sibling(self):
return self.get_prev_siblings().type(self.__class__).live().first()
模板
如果要在模板中使用这些属性,请在定义属性后执行以下操作:
class PortraitPage(Page):
...
def first_portrait(self):
return self.get_siblings().live().first().url
{# This is a template #}
Previous Sibling: {{ page.next_sibling }}
Next Sibling: {{ page.prev_sibling }}
我想它来自页面模型,但我还没有研究它。我只是做了一个dir(self)
并查看了可用的方法。它是有效的。你有哪种版本的摇尾蛇?我正在做第1节。0b1@rnevius啊,在这里,wagtail 0.4的发行说明中只提到了它:Hi@nils和@rnevius,get\u prev\u sibling()
和get\u next\u sibling()
方法来自处理wagtail页面层次结构的Treebeard,并记录在这里:P.s.@nils,如果你使用的是1.0b1,你应该看看我们今天发布的1.0b2:谢谢@tomd!我们说话的时候我正在运行beta2;-)@tomd我刚刚意识到“get_next_sibling()”不包含我在页面模型中定义的字段(例如“header_image”)。有没有一种方法可以访问这些内容?有没有任何方法可以在Django模板中实现相同的结果?