Получить случайный объект модели страницы трясогузки, но не текущий - PullRequest
0 голосов
/ 03 ноября 2019

Итак, у меня есть этот процессор контекста шаблона:

from cases.models import CasePage

def random_case(request):
    case = CasePage.objects.live().order_by('?')
    return {'random_case': case}

И в шаблоне я делаю это:

{% for entry in random_case %}
{% if request.get_full_path != entry.get_url %}
{% if forloop.first %}

<a  class="ajax-link project-next" href="{{ entry.get_url }}">
<div class="nav-project-title">{{ entry.title }}</div>
<div class="nav-title">next</div>     
</a>

{% endif %}
{% endif %}
{% endfor %}

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

1 Ответ

1 голос
/ 04 ноября 2019

Сделайте random_case методом CasePage и отфильтруйте регистр с идентификатором, равным self.

class CasePage(Page):
    # ...
    def random_case(self):
        return CasePage.objects.live().exclude(id=self.id).order_by('?').first()

Затем вы можете ссылаться на этот метод в своем шаблоне как page.random_case - имейте в виду, что при каждом вызове будет сделан новый случайный выбор, поэтому вы, вероятно, захотите что-то вроде {% with page.random_case as case %}.

...