I'd suggest something like this:
=== db.py ===
db.define_table('dish',
Field('name'))
db.define_table('ingredient',
Field('name'))
db.define_table('recipe',
Field('dish', db.dish),
Field('ingredient', db.ingredient),
Field('quantity'))
ingredients_in_dish = db((db.dish.id==db.recipe.dish) &
(db.ingredient.id==db.recipe.ingredient))
=== default.py ===
def index():
recipes = ingredients_in_dish(db.dish.name=='Carrot Soup').select()
return dict(recipes=recipes
=== index.html ===
<h1>{{=recipes[0].dish.name}}</h1>
<ul>{{for recipe in recipes:}}
<li>{{=recipe.recipe.quantity}} - {{=recipe.ingredient.name}}</li>
{{pass}}
</ul>