Приращение счетчика в шаблоне вне цикла for - PullRequest
0 голосов
/ 07 октября 2018

Мне нужно сделать приращение счетчика в цикле.Я посмотрел на 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.Но это не подходит для моей цели.

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать тег with для установки переменных в шаблоне как -

{% with count=0  %}        
   {{ count}}
    ...do other stuffs 
{% endwith %}

, а для математики вы можете использовать django математические фильтры как

{{ count|add:"1" }}

Вы можете написать код с использованием обоих.

Подробнее о настройке переменной в шаблоне django - Как установить значение переменной внутрикод шаблона?

и для использования математики в django - Как сделать математику в шаблоне Django?

Надеюсь, это поможет вам.

...