2015-05-20 1 views
4

Я создаю страницу с трясогузка, где мне нужно знать предыдущий и следующий родственный текущей страницы:трясогузка: Получите предыдущий или следующий родственный

В моей странице модели портрета, я попытался определить два метода найти правильные URL-адреса, но мне не хватает важной части. Чтобы получить первый родственный, я могу просто сделать следующее:

class PortraitPage(Page): 

    ... 

    def first_portrait(self): 
     return self.get_siblings().live().first().url 

Существует first() и last() метод, но не похоже, чтобы быть методом next() или previous() получить непосредственных соседей (в порядке что они расположены в трясогузном админе).

Есть ли способ достичь этого?

ответ

1

Пройдя через отладчик какое-то время, я узнал, что трясогузка уже имеет два метода: 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 
+0

Где этот метод существует? Я не вижу его нигде в источнике ... – rnevius

+0

Я предполагаю, что он исходит из модели страницы, но я не рассматривал его. Я просто сделал «dir (self)» и просмотрел доступные методы. И это работает. Какая версия трясогузки у вас есть? Я работаю над v.1.0b1 – nils

+0

@rnevius А, вот и мы, это только упоминается в примечаниях к выпуску трясогузки 0.4: http://docs.wagtail.io/en/latest/releases/0.4.html – nils

5

Django-Treebeard обеспечивает get_next_sibling и get_prev_sibling который вернет ваши прямые братьев и сестер в дерево, но это не обязательно ваш следующий опубликовано sibling. Чтобы запросить тех, которые вы можете использовать:

prev = page.get_prev_siblings().live().first() 
next = page.get_next_siblings().live().first() 

Который, очевидно, также может быть прикован с любыми другими операциями запроса.

1

Вот версия обработки non-published братьев и сестер.

def next_portrait(self): 
    next_sibling = self.get_next_sibling() 
    if next_sibling and next_sibling.live: 
     return next_sibling.url 
    else: 
     next_published_siblings = self.get_next_siblings(
      inclusive=False 
     ).live() 
     if len(next_published_siblings): 
      return next_published_siblings[0].url 
     return self.get_siblings().live().first().url 

def prev_portrait(self): 
    previous_sibling = self.get_prev_sibling() 
    if previous_sibling and previous_sibling.live: 
     return previous_sibling.url 
    else: 
     previous_published_siblings = self.get_prev_siblings(
      inclusive=False 
     ).live() 
     if len(previous_published_siblings): 
      return previous_published_siblings[0].url 
     return self.get_siblings().live().last().url 

 Смежные вопросы

  • Нет связанных вопросов^_^