Search code examples
pythontemplatesflaskdeploymentrender.com

Python+Flask - Getting "jinja2.exceptions.TemplateNotFound: index.html" when deploying on render.com (works fine locally)


This is my first attempt at deploying a web service

I have been locally developing a flask application for the last 2 months, and have never had any trouble finding templates. When I try to access my web app after being deployed on render.com, it displays this message on the website

Internal Server Error The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application

These are the logs that are displayed after the error occurs

\

Aug 15 03:53:33 PM  [2023-08-15 19:53:33,394] ERROR in app: Exception on / [GET]
Aug 15 03:53:33 PM  Traceback (most recent call last):
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
Aug 15 03:53:33 PM      response = self.full_dispatch_request()
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
Aug 15 03:53:33 PM      rv = self.handle_user_exception(e)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1823, in full_dispatch_request
Aug 15 03:53:33 PM      rv = self.dispatch_request()
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
Aug 15 03:53:33 PM      return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
Aug 15 03:53:33 PM    File "/opt/render/project/src/app/views.py", line 20, in home
Aug 15 03:53:33 PM      return render_template('index.html')
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 146, in render_template
Aug 15 03:53:33 PM      template = app.jinja_env.get_or_select_template(template_name_or_list)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
Aug 15 03:53:33 PM      return self.get_template(template_name_or_list, parent, globals)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 1010, in get_template
Aug 15 03:53:33 PM      return self._load_template(name, globals)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 969, in _load_template
Aug 15 03:53:33 PM      template = self.loader.load(self, name, self.make_globals(globals))
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/loaders.py", line 126, in load
Aug 15 03:53:33 PM      source, filename, uptodate = self.get_source(environment, name)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 62, in get_source
Aug 15 03:53:33 PM      return self._get_source_fast(environment, template)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 98, in _get_source_fast
Aug 15 03:53:33 PM      raise TemplateNotFound(template)
Aug 15 03:53:33 PM  jinja2.exceptions.TemplateNotFound: index.html
Aug 15 03:53:33 PM  127.0.0.1 - - [15/Aug/2023:19:53:33 +0000] "GET / HTTP/1.1" 500 265 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
Aug 15 03:53:33 PM  [2023-08-15 19:53:33,576] ERROR in app: Exception on / [GET]
Aug 15 03:53:33 PM  Traceback (most recent call last):
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
Aug 15 03:53:33 PM      response = self.full_dispatch_request()
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
Aug 15 03:53:33 PM      rv = self.handle_user_exception(e)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1823, in full_dispatch_request
Aug 15 03:53:33 PM      rv = self.dispatch_request()
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
Aug 15 03:53:33 PM      return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
Aug 15 03:53:33 PM    File "/opt/render/project/src/app/views.py", line 20, in home
Aug 15 03:53:33 PM      return render_template('index.html')
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 146, in render_template
Aug 15 03:53:33 PM      template = app.jinja_env.get_or_select_template(template_name_or_list)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
Aug 15 03:53:33 PM      return self.get_template(template_name_or_list, parent, globals)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 1010, in get_template
Aug 15 03:53:33 PM      return self._load_template(name, globals)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 969, in _load_template
Aug 15 03:53:33 PM      template = self.loader.load(self, name, self.make_globals(globals))
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/loaders.py", line 126, in load
Aug 15 03:53:33 PM      source, filename, uptodate = self.get_source(environment, name)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 62, in get_source
Aug 15 03:53:33 PM      return self._get_source_fast(environment, template)
Aug 15 03:53:33 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 98, in _get_source_fast
Aug 15 03:53:33 PM      raise TemplateNotFound(template)
Aug 15 03:53:33 PM  jinja2.exceptions.TemplateNotFound: index.html
Aug 15 03:53:33 PM  127.0.0.1 - - [15/Aug/2023:19:53:33 +0000] "GET / HTTP/1.1" 500 265 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
Aug 15 03:53:39 PM  [2023-08-15 19:53:39,371] ERROR in app: Exception on / [GET]
Aug 15 03:53:39 PM  Traceback (most recent call last):
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
Aug 15 03:53:39 PM      response = self.full_dispatch_request()
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
Aug 15 03:53:39 PM      rv = self.handle_user_exception(e)
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1823, in full_dispatch_request
Aug 15 03:53:39 PM      rv = self.dispatch_request()
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
Aug 15 03:53:39 PM      return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
Aug 15 03:53:39 PM    File "/opt/render/project/src/app/views.py", line 20, in home
Aug 15 03:53:39 PM      return render_template('index.html')
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 146, in render_template
Aug 15 03:53:39 PM      template = app.jinja_env.get_or_select_template(template_name_or_list)
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
Aug 15 03:53:39 PM      return self.get_template(template_name_or_list, parent, globals)
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 1010, in get_template
Aug 15 03:53:39 PM      return self._load_template(name, globals)
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/environment.py", line 969, in _load_template
Aug 15 03:53:39 PM      template = self.loader.load(self, name, self.make_globals(globals))
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/jinja2/loaders.py", line 126, in load
Aug 15 03:53:39 PM      source, filename, uptodate = self.get_source(environment, name)
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 62, in get_source
Aug 15 03:53:39 PM      return self._get_source_fast(environment, template)
Aug 15 03:53:39 PM    File "/opt/render/project/src/.venv/lib/python3.7/site-packages/flask/templating.py", line 98, in _get_source_fast
Aug 15 03:53:39 PM      raise TemplateNotFound(template)
Aug 15 03:53:39 PM  jinja2.exceptions.TemplateNotFound: index.html
Aug 15 03:53:39 PM  127.0.0.1 - - [15/Aug/2023:19:53:39 +0000] "GET / HTTP/1.1" 500 265 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"

This is the file structure of my project

init.py

load_dotenv()
app = Flask('__main__', static_folder='app/static', template_folder='app/templates')

from app import views

views.py

@app.route('/', methods=['POST', 'GET'] )
def home():
    return render_template('index.html')

run.py

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

Solution

  • The problem ended up being that I was trying to find my template folder using a relative path. It was required that I use an absolute path in order to find my template files

    template_folder='app/templates'
    

    to

    template_folder='/pathtoapp/app/templates'