【发布时间】:2012-09-09 14:37:07
【问题描述】:
我遇到以下问题:用户正在我的网站上学习课程。一门课程由几个章节组成,每章包含几个步骤。如果用户已登录并完成一个步骤,则后端会保存进度。当用户回到站点时,我希望他从他离开的地方继续。为此,我必须将 css 类“活动”添加到相应的导航步骤和每章的内容选项卡中。我的出发点是使用 if 语句测试用户是否已经完成了该步骤。效果很好,但将 .active 添加到所有尚未完成的步骤。我只想将它添加到尚未完成的第一步。我实际上已经解决了这个问题,但这是一个相当粗暴的 hack,我必须包含一个 custom template tag that allows me to set a variable in the template:
{% load custom_tags %}
{% for chapter in chapters %}
<div>
<ul class="unstyled wizard clearfix">
{% set active_wizard_steps = 0 %}
{% for step in chapter.steps.all %}
<li class="{% if not step.read and active_wizard_steps == 0 %}active{% set active_wizard_steps = 1 %}{% endif %}{% if step.read %} finished{% endif %}"></li>
{% endfor %}
</ul>
</div>
{% endfor %}
我知道这也可以通过将列表或字典传递给包含所有活动步骤的模板来完成,然后在模板中测试一个步骤是否在该列表中。但这意味着要重写很多视图代码,所以我决定完全在模板中完成。
所以我的问题是:解决这个问题的最佳实践方法是什么?我只是出于好奇而问,因为这个问题实际上很有趣。非常感谢!
【问题讨论】:
标签: django for-loop django-templates