Как создать функцию для организации объектов на шаблоне
Я пытаюсь создать шаблон для целевой страницы блога. Пока объект политики меньше четырех, я хочу, чтобы выполнялся первый цикл 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">•</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">•</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
и она не будет работать, по крайней мере, плохо.
Второй цикл вообще не имеет смысла, думаю, он вам не нужен.