Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python Flask with SQLAlchemy Basics Connecting to a Database with SQLAlchemy Working with a Plant Database

Next, you need to get all of the plants in the database so they can be displayed on the homepage. Inside of the index fu

Next, you need to get all of the plants in the database so they can be displayed on the homepage. Inside of the index function, gather all of the plants with .query.all() and pass them into the template. Use plants= inside of render_template() and set it equal to the plants

app.py
from models import db, Plant, app
from flask import render_template, url_for, request, redirect


@app.route('/')
def index()
    render_template(plants=Plant.query.all())
    return render_template('index.html', plants=Plant.query.all())


@app.route('/form', methods=['GET', 'POST'])
def form():
    if request.form:
        new_plant = Plant(plant_type=request.form['type'],  
                          plant_status=request.form['status']) 
         db.add(new_plant)
         db.commit()
        return redirect(url_for('index'))
    return render_template('form.html',)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)
models.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///plants.db'
db = SQLAlchemy(app)

class Plant(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    plant_type = db.Column(db.String())
    plant_status = db.Column(db.String())
form.html
{% extends 'layout.html' %}

{% block content %}
    <form action="{{ url_form('form') }}" method="POST">
        <label for="type">Plant Type:</label>
        <input type="text" name="type" id="type" placeholder="Plant type">

        <p>Plant Status:</p>
        <label for="good">GOOD</label>
        <input type="radio" name="status" id="good">
        <label for="ok">OK</label>
        <input type="radio" name="status" id="ok">
        <label for="bad">BAD</label>
        <input type="radio" name="status" id="bad">
    </form>
{% endblock %}
index.html
{% extends 'layout.html' %}


{% block content %}


    <h1>Our Plants:</h1>
    <div>
        <h2>Plant Type</h2>
        <p>Plant Status</p>
    </div>


{% endblock %}

1 Answer

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

Hi matthew walter !

You are calling render template twice. We just want the return statement to call the render template method. The plants = Plant.query.all() that you have on line 7 is correct, but it doesn't need to be wrapped in the render template. Then in the render_template on line 8, we can set plants=plants. We won't need to query the database again since we are using the variable that is storing all of the plants.

Hopefully this helps! Let me know if you have any questions.