【问题标题】:Get a random object of a Wagtail page model but not the current one获取 Wagtail 页面模型的随机对象,但不是当前对象
【发布时间】:2019-11-03 15:49:59
【问题描述】:

所以我有这个模板上下文处理器:

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 %}

这可行,但问题是有时对象与页面相同,因此没有显示任何内容。如果该条目会被跳过以支持下一个条目,那就太好了。对我来说,模板中的逻辑也太多了。将此逻辑移入上下文处理器并使其工作的最佳方法是什么?

【问题讨论】:

    标签: django django-templates wagtail


    【解决方案1】:

    random_case设为CasePage的方法,过滤掉ID等于self的case。

    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 %} 的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多