Django, как использовать массив в шаблоне в forloop - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь использовать массив внутри HTML-файла в цикле

вид

def noticia(request, noticia_id):
   noticia = get_object_or_404(Noticia, pk=noticia_id)
   user_like = False
   likes = []
   dislikes = []
   x = 0
   for comentario in noticia.comentario_set.all().order_by('-pub_data'):
       likes.append(0)
       dislikes.append(0)
   for comentario in noticia.comentario_set.all():
       for like in comentario.like_set.all():
           if like.like:
               likes[x] += 1
           elif like.dislike:
               dislikes[x] += 1
           if like.user == request.user:
               user_like = True
   return render(request, 'Bola/Noticia.html', {'noticia': noticia, 'user_like': user_like, 'likes': likes,
                                                'dislikes': dislikes})

Html

{% for comentario in noticia.comentario_set.all|dictsortreversed:"pub_data"%}
  {% for like in comentario.like_set.all %}
    <p>{{ likes.forloopcounter0 }} {{ dislikes.forloopcounter0 }}</p>

Есть идеи, как заставить это работать?

1 Ответ

0 голосов
/ 06 мая 2019

Вероятно, есть лучший способ сделать это, используя Условное агрегирование .

Чтобы использовать это, сначала давайте обновим отношение ForeignKey между Comentario и Like, используя related_name:

<code>class Like(models.Model):
    comment = models.ForeignKey(Comentario, <b>related_name='likes'</b>, on_delete=models.CASCADE)

Теперь используйте это связанное имя в наборе запросов:

from django.db.models import Count, Case, When, IntegerField

...

comments = noticia.comentario_set.all().annotate(
    like_count=Count(Case(
        When(likes__like=True, then=1),
        output_field=IntegerField(),
    )).annotate(dislike_count=Count(Case(
        When(likes__like=False, then=1),
        output_field=IntegerField(),
    ))
)

return render(request, 'Bola/Noticia.html', {'comments': comments})

Затем используйте его в шаблоне:

{% for comentario in comments %}
   {{ comentario.like_count }}
   {{ comentario.dislike_count }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...