As of Flask 0.8, blueprints add the specified template_folder to the app’s searchpath, rather than treating each of the directories as separate entities. This means that if you have two templates with the same filename, the first one found in the searchpath is the one used. This is admittedly confusing, and is poorly documented at this time (see this bug). It seems that you weren’t the only one that was confused by this behavior.
The design reason for this behavior is so that blueprint templates can be easily overriden from the main app’s templates, which are first-in-line in Flask’s template searchpath.
Two options come to mind.
- Rename each of the
index.html
files to be unique (e.g.admin.html
andmain.html
). - In each of the template folders, put each of the
templates in a subdirectory of the blueprint folder and then call
the template using that subdirectory. Your admin template, for example, would beyourapp/admin/pages/admin/index.html
, and then called from within
the blueprint asrender_template('admin/index.html')
.