python - for循环外模板中的计数器增量
问题描述
我需要在循环中进行计数器增量。我查看了 django for.counter,但不幸的是,我的增量并不完全发生在循环的每次迭代中。那么有什么办法可以在 django 模板中实现变量的增量,而无需费力地在我的代码中实现一个新对象来做到这一点而没有这样的增量?
在下面的代码中,我写了这些行{{ count = 0 }}
,{{ count += 1 }}
只是为了说明目的。我知道这行不通。以下是我的模板的一个非常简化的形式:
<div class="jumbotron slotgroup slotavailable mb-1 mt-5" id="jumbo_week_avail">
<div class="slot-header" role="alert">
Headertext
</div>
{% if weeklyslotsav %}
{% for day,daynum in weekzip %}
{{ count = 0 }}
{% if daynum in weeklyslotsav.day %}
{% for weekslotav in weeklyslotsav %}
{% if weekslotav.day == daynum %}
<div class="row row_week_avail{{ weekslotav.day }}" id="row_week_avail{{ weekslotav.day }}_{{ count }}">
</div>
{{ count += 1 }}
{% endif}
{% endfor %}
{% else %}
<div class="row row_week_avail{{ daynum }}" id="row_week_avail{{ daynum }}_0">
</div>
{% endif %}
{% endfor %}
{% else %}
{% for weekday, weeknum in weekzip %}
<div class="row row_week_avail{{ weeknum }}" id="row_week_avail{{ weeknum }}_0">
</div>
{% endfor %}
{% endif %}
</div>
以下是我观点的一部分:
def edit_doctorslots(request, cliniclabel, doctor_id):
doctor_id=int(doctor_id)
doc = get_object_or_404(doctor, docid=doctor_id)
cl = Clinic.objects.get(label=cliniclabel)
print("Clinic name", cl.name)
regularslotsav = ''
try:
regularslotsav = Timeslots.objects.filter(clinic =cl, doctor =doc, available =True)
except:
pass
regularslotsbr = ''
try:
regularslotsbr = Timeslots.objects.filter(clinic =cl, doctor =doc, available =False)
except:
pass
weekavzip = ''
try:
weeklyslotsav = Weekdays.objects.filter(clinic =cl, doctor =doc, available =True)
weekav = range(0, len(weeklyslotsav))
weekavzip = list(zip(weeklyslotsav, weekav))
except:
pass
weeklyslotsbr = ''
try:
weeklyslotsbr = Weekdays.objects.filter(clinic =cl, doctor =doc, available =False)
except:
pass
formslot = SlotForm()
formspecialdays = SpecialdaysForm()
formweekdays = WeekdaysForm()
weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
weekdaynum = [0,1,2,3,4,5,6]
weekzip = list(zip(weekdays, weekdaynum))
newweekzip = weekzip
return render(request, 'clinic/editslots0.html', {'rnd_num': randomnumber(), 'clinic': cl, 'doctor': doc, 'formslot': formslot, 'formspecialdays': formspecialdays, 'formweekdays': formweekdays, 'weekzip': weekzip, 'newweekzip': newweekzip, 'regav': regularslotsav, 'regbr': regularslotsbr, 'weekav': weekavzip, 'weekbr': weeklyslotsbr, 'weeklyslotsav': weeklyslotsav })
我在 SO 上看到了许多类似的问题。但是,在所有这些中,我都看到有人介绍for.counter
. 但这不适合我的目的。
解决方案
您可以使用with
标签将模板中的变量设置为 -
{% with count=0 %}
{{ count}}
...do other stuffs
{% endwith %}
对于数学,您可以使用 django数学过滤器,例如
{{ count|add:"1" }}
您可以使用两者来编码。
有关在 django 模板中设置变量的更多信息 -如何在模板代码中设置变量的值?
以及在 django 中使用数学 -如何在 Django 模板中进行数学计算?
希望这对您有所帮助。
推荐阅读
- hadoop - Hadoop 调度程序与 oozie
- python - Tkinter - 在一个类中使用 Button 命令从另一个类调用函数
- c++ - 使用模板方法为标头提供空 cpp 的问题
- webpack - 为什么 Webpack 中没有设置环境
- spring-mvc - Spring Boot 2 的侵入性 AsyncRequestTimeoutException
- python - 在 python 中使用 mplayer 从 websoket 播放音频延迟 4 到 5 秒
- python - 使用 cv2 时关闭 Python 文件
- swift - 将 csv 文件从 Apple Watch 发送到手机 - 没有任何反应
- android - 片段中的线程只调用一次
- javascript - JS Contenteditable 下划线不起作用