Шаблон 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.

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