Шаблон Django для цикла пуст в другом блоке
У меня есть функция в моем view.py:
@login_required(login_url='login')
def gpd(request,pk):
# get gpd by id
current_gpd = get_gpd(pk)
# get current campaign year #TODO check types
current_campaign = get_campaign(current_gpd.gpd_year)
# get all corporate goals for current campaign
corp_goals = CorporateGoal.objects.filter(gpd_year=current_campaign.year)
compl_weight = []
for goal in corp_goals:
compl_weight.append(goal.corp_factor_weight*current_gpd.bonus.corporate_component//100)
corporate_goals = zip(corp_goals, compl_weight)
if is_manager(request)!=None:
team = get_team(request)
context = {'gpd':current_gpd,
'corporate_goals':corporate_goals,
}
return render(request, 'app/gpd_forms/form_gpd.html', context)
else:
context = {'gpd':current_gpd,
'corporate_goals':corporate_goals,
}
return render(request, 'app/gpd_forms/form_gpd.html', context)
Как видите, в контексте у меня corporate_goal.
Мой form_gpd.html:
{% extends 'app/navbar/main.html' %}
{% load static %}
{% block content %}
{% include 'app/slidebar/gpd_form_slidebar.html' %}
<div class="container" style="background-color:white">
<div class="row">
<div id="section2" class="container-fluid">
{% include 'app/gpd_blocks/corporate_goal.html' %}
</div>
</div>
<hr />
</div>
<div class="container" style="background-color:white">
<div class="row">
<div id="section5" class="container-fluid">
{% include 'app/gpd_blocks/summary.html' %}
</div>
</div>
<hr />
</div>
</div>
{% endblock %}
например, в корпоративном блоке я выполняю следующее:
И это прекрасно работает. Но когда в последнем блоке summary я хочу использовать corporate_goals еще раз - у меня на странице ничего нет, похоже, что corporate_goals не существует.
мой summary.html
{% load static %}
{% block content %}
<div class="row">
<p>123</p>
</div>
<div class="row">
{% for goal, compl_weight in corporate_goals %}
{{ goal.corp_goal_title }}
{% endfor %}
</div>
<div class="row">
<p>123</p>
</div>
{% endblock %}
Даже если я скопирую весь свой код из corporate_goal.html в summary - у меня ничего не будет. Почему ?
Я думаю, что проблема в том, что ваша структура html не имеет смысла. У вас есть три {% block content %}. Пожалуйста, удалите блоки содержимого ваших включаемых файлов (corporate_goal.html и summary.html) и проверьте, в этом ли проблема. Я думаю, что один из ваших блоков содержимого переопределяет другой.
Просто чтобы прояснить, когда вы используете тег "include tag", это как будто вы вставляете код из другого файла. Представьте себе результат. У вас есть содержимое блока, которое содержит внутри себя два других содержимых блока.
Моя проблема заключалась в объектах zip. Когда мы выполняем итерацию по zip-объекту, он исчерпывается, и вы не можете повторить итерацию по нему. Так что решение corporate_goals = list(zip(corp_goals, compl_weight)). В любом случае, спасибо, @LaCharcaSoftware, за совет, я изменил свою структуру, чтобы избежать дублирования с block content.