I am a newbie to FLASK.
I am creating an e-commerce site in flask and I want to create multiple routes dynamically for same function and pass data which is fetched on the basis of Unique ID to single template in FLASK.
Let me explain it.
I have a table in DB as below:
id | category | slug |
---|---|---|
1 | cat1 | slug1 |
2 | cat2 | slug2 |
3 | cat3 | slug3 |
4 | cat4 | slug4 |
my python code is:
for (data in db): @app.route('/data["slug"]') def product_display(data["id"]): id = data["id"] products = fetch_products(id) return render_template('products.html', products=products)
Please let me know if this code will work or not. If no then what should be the logic?
Thanks in advance.
Advertisement
Answer
I think your asking for how to use variables in routes?
@app.route('/<slug>') def product_display(slug): category = Category.query.filter_by(slug=slug).first_or_404() products = Product.query.filter_by(category_id=category.id).all() return render_template('products.html', category=category, products=products
Read up more on route variables in the docs
Generating links to all categories
You comment mentions ‘ that variable should be coming from for loop of data fetched from DB’ the best way I can parse that you want, say, a listing of all current categories (like a navigation bar in an online shop)
You might add a second route:
@app.route('/all-categories') def all_categories(): categories = Category.query.all() return render_template('all_categories.html', categories=categories)
Then in your all_categories.html
you would ‘build’ the urls to the first route:
<ul> {% for category in categories %} <li><a href="{{ url_for('product_display', slug=category.slug) }}">{{ category.slug }} (or title...)</li> {% endfor %} </ul>
So both routes work together to get that ‘looped data’ from the database