【问题标题】:Iterating multiple for loops based on the same list基于同一个列表迭代多个 for 循环
【发布时间】:2018-10-03 16:34:04
【问题描述】:

在我的 django 模板中,我需要基于同一个压缩列表添加两个循环。不幸的是,似乎只执行了第一个循环。

我在views.py中有以下代码:

@login_required
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)
    formslot = SlotForm()
    formspecialdays = SpecialdaysForm()
    formweekdays = WeekdaysForm()
    weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
    weekdaynum = [0,1,2,3,4,5,6]
    weekzip = zip(weekdays, weekdaynum)
    newweekzip = weekzip
    return render(request, 'clinic/editslots.html', {'rnd_num': randomnumber(), 'clinic': cl, 'doctor': doc, 'formslot': formslot, 'formspecialdays': formspecialdays, 'formweekdays': formweekdays, 'weekzip': weekzip, 'newweekzip': newweekzip })

我的模板:

<div class="container ml-5 mr-5">
    <div class="jumbotron slotgroup slotavailable mb-1 mt-5" id="jumbo_week_avail">
      <div class="slot-header" role="alert">
        Enter your weekly consultation hours at {{ clinic.name }}. This will supercede regular hours. If you specify some week days, but not others, you will be assumed to be on leave during those days. If you dont specify any week days, but specify regular hours, you will be assumed to be working on all days.
      </div>
      {% for weekday, weeknum in weekzip %}
      <div class="row row_week_avail" id="row_week_avail{{ weeknum }}">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail{{ weeknum }}" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">{{ weekday }}</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail{{ weeknum }}" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail{{ weeknum }}" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail{{ weeknum }}"><i class="fas fa-plus"></i></a>
          </div>
      </div>
      {% endfor %}
    </div>

    <div class="jumbotron slotgroup slotunavailable mb-1" id="jumbo_week_break">
      <div class="slot-header" role="alert">
        Break Time (Unavailable Hours) <span class="text-muted">Time in between regular period, where you are unavailable.</span>
      </div>
      {% for weekday, weeknum in weekzip %}
        <div class="row row_week_break" id="row_week_break{{ weeknum }}">
          <div class="col-md-1 mr-2">
            <label class="switch switch_type1 greenswitch" role="switch">
            <input type="checkbox" id="chk_week_break{{ weeknum }}" class="switch__toggle">
            <span class="switch__label"></span>
          </label>
          </div>
          <div class="col-md-2 text-right">
            <span class="">{{ weekday }}</span>
          </div>
            <div class="col-md-6">
              <input type="text" class="form-control timeinput" id="start_week_break{{ weeknum }}" aria-describedby="mainslotstarthelp" placeholder="Starts at">
              <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
            </div>
            <div class="col-md-6">
              <input type="text" class="form-control timeinput" id="end_week_break{{ weeknum }}" aria-describedby="mainslotendhelp" placeholder="Ends at">
              <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
            </div>
            <div class="col-md-6">
                <a class="btn btn-primary AddHoursBtn" id="btn_week_break{{ weeknum }}"><i class="fas fa-plus"></i></a>
            </div>
        </div>
      {% endfor %}
    </div>
</div>

在渲染时,第二个 for 循环不会迭代。 渲染的html:

<div class="container ml-5 mr-5">
    <div class="jumbotron slotgroup slotavailable mb-1 mt-5" id="jumbo_week_avail">
      <div class="slot-header" role="alert">
        Enter your weekly consultation hours at Dr Joel's ENT Clinic. This will supercede regular hours. If you specify some week days, but not others, you will be assumed to be on leave during those days. If you dont specify any week days, but specify regular hours, you will be assumed to be working on all days.
      </div>

      <div class="row row_week_avail" id="row_week_avail0">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail0" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Sunday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail0" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail0" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail0"><i class="fas fa-plus"></i></a>
          </div>
      </div>

      <div class="row row_week_avail" id="row_week_avail1">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail1" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Monday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail1" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail1" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail1"><i class="fas fa-plus"></i></a>
          </div>
      </div>

      <div class="row row_week_avail" id="row_week_avail2">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail2" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Tuesday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail2" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail2" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail2"><i class="fas fa-plus"></i></a>
          </div>
      </div>

      <div class="row row_week_avail" id="row_week_avail3">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail3" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Wednesday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail3" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail3" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail3"><i class="fas fa-plus"></i></a>
          </div>
      </div>

      <div class="row row_week_avail" id="row_week_avail4">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail4" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Thursday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail4" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail4" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail4"><i class="fas fa-plus"></i></a>
          </div>
      </div>

      <div class="row row_week_avail" id="row_week_avail5">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail5" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Friday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail5" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail5" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail5"><i class="fas fa-plus"></i></a>
          </div>
      </div>

      <div class="row row_week_avail" id="row_week_avail6">
        <div class="col-md-1 mr-2">
          <label class="switch switch_type1 greenswitch" role="switch">
          <input type="checkbox" id="chk_week_avail6" class="switch__toggle">
          <span class="switch__label"></span>
        </label>
        </div>
        <div class="col-md-2 text-right">
          <span class="">Saturday</span>
        </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="start_week_avail6" aria-describedby="mainslotstarthelp" placeholder="Starts at">
            <small id="mainslotstarthelp" class="form-text text-muted">Start time of consultations</small>
          </div>
          <div class="col-md-6">
            <input type="text" class="form-control timeinput" id="end_week_avail6" aria-describedby="mainslotendhelp" placeholder="Ends at">
            <small id="mainslotendhelp" class="form-text text-muted">End time of consultations</small>
          </div>
          <div class="col-md-6">
              <a class="btn btn-primary AddHoursBtn" id="btn_week_avail6"><i class="fas fa-plus"></i></a>
          </div>
      </div>

    </div>

    <div class="jumbotron slotgroup slotunavailable mb-1" id="jumbo_week_break">
      <div class="slot-header" role="alert">
        Break Time (Unavailable Hours) <span class="text-muted">Time in between regular period, where you are unavailable.</span>
      </div>

    </div>
</div>

为什么会这样?

【问题讨论】:

    标签: python django python-3.x django-templates


    【解决方案1】:

    在 Python 3 中,zip 返回一个生成器:一旦迭代,它就会耗尽。您应该先将其转换为列表:

    weekzip = list(zip(weekdays, weekdaynum))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2021-12-07
      • 2020-04-08
      • 2016-05-08
      • 2023-03-25
      • 2013-09-16
      • 2014-01-13
      相关资源
      最近更新 更多