Python Flask Basics Character Builder Loop Nested Items

Ngqabutho Moyo
Ngqabutho Moyo
2,538 Points

Nested loops confusing me

How do I nest a 'for' loop in jinja syntax? Should I type{{% for item in items %}} twice?

flask_app.py
from flask import Flask, render_template

from teachers import TEACHERS

app = Flask(__name__)


@app.route('/')
def index():
    return render_template("teachers.html", teachers=TEACHERS)
templates/teachers.html
<ul class="teachers">
  {% for item in teachers %}
  <li>    
   <h2>{{item.name}}</h2> 
   <ul class='courses'>
      {% for item in courses %}
        <li>{{item.name}}</li>
      {% endfor %}
    </ul> 
  </li>
  {% endfor %}
</ul>

2 Answers

Mel Rumsey
seal-mask
STAFF
.a{fill-rule:evenodd;}techdegree seal-36
Mel Rumsey
Treehouse Staff

Greetings Ngqabutho!

Great job so far! You can definitely keep on nesting those for loops, but if you are naming everything {% item in ____ %} it could get a bit confusing. So the first thing I recommend is saying something like {% for teacher in teachers %}, {% for student in students %}, etc.

So for this part of the challenge you are asked to iterate through the teacher's 'courses' key. You have already done this for the 'name' key by saying {{ teacher.name }}. Now to access the course key in the for in loop you need to iterate for course in teacher.courses (can also be done as teacher['courses']) Then in your li tags we want course to be printed (course.name will not work because name is a key for teacher) so a simple {{ course }} will work!

Hope this helps and happy coding! 💚💚💚

Jennifer Nordell
seal-mask
STAFF
.a{fill-rule:evenodd;}techdegree
Jennifer Nordell
Treehouse Teacher

Hi there, Ngqabutho Moyo! The problem with the nested loop really is that you are re-defining item. This is going to confuse things :smiley: I would suggest using separate variables in the for loops. Like for teacher in teachers and for course in teacher.courses.

Hope this helps! :sparkles: