Как создать функцию для организации объектов на шаблоне

Я пытаюсь создать шаблон для целевой страницы блога. Пока объект политики меньше четырех, я хочу, чтобы выполнялся первый цикл for.

**political.html

{% extends 'index.html' %}
{% block content %}
{% for politics in politics %}
<div class="post-entry-1 col-lg-4 box mx-1">
    <a href="single-post.html"><img src="{{politics.image.url}}" alt="" class="post_img"></a>
    <div class="post-meta"><span class="date">{{politics.category}}</span> <span class="mx-1">&bullet;</span> <span>{{politics.created_at}}</span></div>
    <h2 class="mb-2"><a href="single-politics.html">{{politics.title}}</a></h2>
    <span class="author mb-3 d-block">Ole Pundit</span>
    <p class="mb-4 d-block">{{politics.body|truncatewords:75}}</p>
</div>
    {% if politics > 4 %}
        {% for politics in politics %}
        <div class="post-entry-1 border-bottom">
            <div class="post-meta">
                <span class="date">Culture</span>
                <span class="mx-1">&bullet;</span> 
                <span>Jul 5th '22</span>
            </div>
            <h2 class="mb-2">
                <a href="single-post.html">How to Avoid Distraction and Stay Focused During Video Calls?

                </a>
            </h2>
            <span class="author mb-3 d-block">Jenny Wilson</span>
        </div>
        {% endfor %}
    {% endif %}
{% endfor %}
{% endblock %}

Но как только количество политических постов превысит 4, я хочу, чтобы выполнялся второй цикл for. В идеале эта функция должна помочь мне организовать место появления постов на целевой странице.

**view.py

from django.shortcuts import render
from .models import Post, Politics
from django.views.generic import DetailView

# Create your views here.

def index(request):
    return render(request, 'index.html')

def allposts(request):
    posts = Post.objects.all()
    return render(request, 'allposts.html', {'posts':posts})

def political(request):
    politics = Politics.objects.all()
    return render(request, 'political.html', {'politics':politics})

def post(request, pk):
    posts = Post.objects.get(id=pk)
    return render(request, 'posts.html', {'posts':posts})  

Во-первых, если вы хотите считать объекты, вам нужно использовать .count в шаблоне:

{% if politics > 4 %}         # good for integers or similar
{% if politics.count > 4 %}   # good for querysets

Во-вторых, вы должны понимать стандартный питоновский for loops, потому что {% for politics in politics %} просто не имеет абсолютно никакого смысла. Это работает следующим образом:

{% for politic in politics %}    # usually it's like this: {% for SINGULAR in PLURAL %}

иначе вы переопределяете переменную politics и она не будет работать, по крайней мере, плохо.

Второй цикл вообще не имеет смысла, думаю, он вам не нужен.

Вернуться на верх