Как получить сумму значений в шаблоне Django для цикла или как я могу реализовать то же самое в представлении Django
это мой шаблон
<div class="row m-5 p-3 border bg-white">
<table class="table ">
<tr>
<th>Project Name</th>
<th>Total Partnership</th>
</tr>
{% for pages in page %}
<tr>
<td>{{pages.name}}</td>
<td>
{% for i in pages.partnership_set.all %}
{{i.partnership}}%
{% endfor%}
</td>
</tr>
{% endfor %}
</table>
</div>
Моя точка зрения такова:
def fnviewproject(request):
projects=project.objects.all()
paginator=Paginator(projects,3)
page_num=request.GET.get('page')
page_obj=paginator.get_page(page_num)
context={'page':page_obj}
return render(request,"viewproject.html",context)
Мой вывод: | Название проекта | Полное партнерство |-------------|-------------------| |проект 1. | |Project 2. 20% 30% 40%. | |project 3. |
Я просто хочу, чтобы это общее партнерство было добавлено и отображено. Как я могу сделать это либо в шаблоне, либо в представлении?
Вы можете создать пользовательский тег templatetag, если хотите, чтобы обработка выполнялась в шаблоне.
project_dir/app_name/templatetags/sometag.py
from django import template
register = template.Library()
@register.filter
def total_percentage(value):
temp_val = value.split(' ')
percentage = 0
for val in temp_val:
percentage += int(val[:-1])
return str(percentage) + '%'
Затем вызовите его в вашем шаблоне следующим образом:
{% load sometag %}
{% total_percentage i.partnership %}
Разработчики Django придерживались мнения, что шаблоны предназначены для представления данных. Бизнес-логика должна быть реализована в коде Python. "Мнение". Поэтому вы не можете легко и естественно создавать итоги в шаблоне, только отображать их.
Вы не показываете свои модели, но если я правильно догадался, вы хотите, чтобы каждый pages отображал количество объектов в partnership_set? Если да, то вы можете получить это непосредственно из базы данных с помощью аннотации queryset (например, cheat sheet пример 6)
project = Project.objects.all().annotate(
total_partnerships = Count('partnership')
)
Затем в вашем шаблоне
{{ pages.total_partnerships }}
Для чего-то более сложного вы можете написать функцию Python для ее вычисления, и либо вызвать ее и передать результат через ваш контекст в шаблон, либо прикрепить ее к соответствующей модели как свойство:
class Something (models.Model):
...
@property
def foo_value( self):
# calculate value based on model instance represented by self
return value
в вашем шаблоне
{{ something.foo_value}}
Кстати, ваш код будет лучше, если вы будете придерживаться соглашений Django. Классы моделей начинаются с заглавных букв Project, а не с project. Экземпляр класса не начинается, поэтому вы можете естественно писать project = Project( field=value, ...) или projects = Project.objects.all(). Также старайтесь использовать осмысленные имена переменных. page не очевидно.