Django - 上下文变量

时间:2017-05-24 11:15:51

标签: python django django-templates

我一直在寻找堆栈,我无法得到任何工作。

对我来说更简单的是,我有一个上下文变量,我必须在for循环中重新分配,我可以,但是当一个新的迭代开始时,变量被重置为它的原始上下文值。所以我的问题是,如何在整个循环中保持指定值的持久性?

我正在分配这样的值:

{% with task.new_stage as current %}{% endwith %}

代码的完整摘录如下:

{% for task in tasks_list %}
<h3>At Beg {{current}}</h3>
{% if task.project_stage.id != current %}
<div id="tasks-container-{{ task.project_stage.id }}" class="task-container btn-group-vertical col-md-3">
{% endif %}
    <div class="panel my-panel tasks-panel col-md-11 {% if task.project_stage.has_started and not task.project_stage.has_ended %}active{% endif %} ">
        <span class="text-uppercase">{{ task.task_name }}</span>
        <div class="col-md-12">
            <img id="task-{{ task.id }}" class="download-pdf" src="{% static 'dpp/images/cloud.png' %}" />
        </div>
    </div>
{% if task.project_stage.id != current %}
</div>{% with task.new_stage as current %}<h3>At End{{current}}</h3>{% endwith %}
{% endif %}
{% endfor %}

查看:

def get(self, request):
    if not request.user.is_authenticated():
        form = self.form_class(None)
        return render(request, 'dpp/login.html', {'form': form})

    tasks_list = ProjectTask.objects.all()
    context = {
        'tasks_list' : tasks_list,
        'current' : 0,
    }
    return render(request, self.template_name, context)

1 个答案:

答案 0 :(得分:2)

{% with %}的上下文持续到{% endwith %}。你在启动后立即结束该块,所以它实际上没有效果。

您不应该尝试在上下文中重新分配变量。如果您只是想检查自上次迭代以来某些内容是否发生了变化,您应该使用专为此设计的模板标记:ifchanged