- Other answers have told you
the bootstrap = Bootstrap(app) line "init the extension on the app".
The bootstrap/base.html resides in the Flask-Bootstrap package.
To understand this, you must know something about "Flask's template searchpath"
- application's template folder
- Blueprint's template folder
So the Flask-Bootstrap actually register a blueprint to your app:
class Bootstrap(object): def __init__(self, app=None): if app is not None: self.init_app(app) def init_app(self, app): blueprint = Blueprint( 'bootstrap', __name__, template_folder='templates', static_folder='static', static_url_path=app.static_url_path + '/bootstrap', subdomain=app.config['BOOTSTRAP_LOCAL_SUBDOMAIN']) app.register_blueprint(blueprint)
You can see it clearly by set EXPLAIN_TEMPLATE_LOADING:
app = Flask(__name__) app.config['EXPLAIN_TEMPLATE_LOADING'] = True
then
export FLASK_ENV=development flask run
when you access the page:
[2018-07-12 15:28:58,659] INFO in debughelpers: Locating template "user.html": 1: trying loader of application "hello" class: jinja2.loaders.FileSystemLoader encoding: 'utf-8' followlinks: False searchpath: - /root/learn/python-lab/Flask/flasky/templates -> found ('/root/learn/python-lab/Flask/flasky/templates/user.html') 2: trying loader of blueprint "bootstrap" (flask_bootstrap) class: jinja2.loaders.FileSystemLoader encoding: 'utf-8' followlinks: False searchpath: - /root/learn/python-lab/Flask/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates -> no match ################################################################# Note here ####### [2018-07-12 15:28:58,677] INFO in debughelpers: Locating template "bootstrap/base.html": 1: trying loader of application "hello" class: jinja2.loaders.FileSystemLoader encoding: 'utf-8' followlinks: False searchpath: - /root/learn/python-lab/Flask/flasky/templates -> no match ### in app path not found 2: trying loader of blueprint "bootstrap" (flask_bootstrap) class: jinja2.loaders.FileSystemLoader encoding: 'utf-8' followlinks: False searchpath: - /root/learn/python-lab/Flask/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates ## in blueprint path found the bootstrap/base.html -> found ('/root/learn/python-lab/Flask/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates/bootstrap/base.html') 127.0.0.1 - - [12/Jul/2018 15:28:58] "GET /user/Yao HTTP/1.1" 200 -
bootstrap/base.html, and that question doesn't provide its specific location. Furthermore, I'm willing to hear how can jinja2 find it.bootstrap = Bootstrap(app), it registers in the app some rules which say to Flask where the blueprint's ownstaticandtemplatefolders are.