TemplateNotFound for 404 jinja2 error page

I have a Google App Engine application with jinja2, when I force a 404 error, I have this error:

errors/default_error.html Traceback (most recent call last): File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1536, in __call__ rv = self.handle_exception(request, response, e) File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1596, in handle_exception return handler(request, response, e) File "/base/data/home/apps/s~sandengine/latest.360189283466406656/main.py", line 28, in handle_404 t = jinja2.get_jinja2(app=app).render_template(template, **c) File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2_extras/jinja2.py", line 158, in render_template return self.environment.get_template(_filename).render(**context) File "/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 719, in get_template return self._load_template(name, self.make_globals(globals)) File "/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 693, in _load_template template = self.loader.load(self, name, globals) File "/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/loaders.py", line 115, in load source, filename, uptodate = self.get_source(environment, name) File "/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/loaders.py", line 180, in get_source raise TemplateNotFound(template) TemplateNotFound: errors/default_error.html 

Here is my yaml file:

 application: sandengine version: latest runtime: python27 api_version: 1 threadsafe: true default_expiration: "30d" skip_files: - ^(.*/)?app\.yaml - ^(.*/)?app\.yml - ^(.*/)?index\.yaml - ^(.*/)?index\.yml - ^(.*/)?#.*# - ^(.*/)?.*~ - ^(.*/)?.*\.py[co] - ^(.*/)?.*/RCS/.* - ^(.*/)?\..* - ^(.*/)?tests$ - ^(.*/)?test$ - ^Makefile - ^COPYING.LESSER - ^README.rdoc - \.gitignore - ^\.git/.* - \.*\.lint$ builtins: - appstats: on #/_ah/stats/ - remote_api: on #/_ah/remote_api/ handlers: - url: /favicon\.ico mime_type: image/vnd.microsoft.icon static_files: static/favicon.ico upload: static/favicon.ico - url: /apple-touch-icon\.png static_files: static/apple-touch-icon.png upload: static/apple-touch-icon.png - url: /(robots\.txt|humans\.txt|crossdomain\.xml) static_files: static/\1 upload: static/(robots\.txt|humans\.txt|crossdomain\.xml) - url: /img/(.*\.(gif|png|jpg)) static_files: static/img/\1 upload: static/img/(.*\.(gif|png|jpg)) - url: /css mime_type: text/css static_dir: static/css - url: /js mime_type: text/javascript static_dir: static/js - url: /.* script: main.app libraries: - name: jinja2 version: "2.6" - name: webapp2 version: "2.5.1" - name: markupsafe version: "0.15" error_handlers: - file: templates/errors/default_error.html - error_code: over_quota file: templates/errors/over_quota.html - error_code: dos_api_denial file: templates/errors/dos_api_denial.html - error_code: timeout file: templates/errors/timeout.html 

code:

 def handle_404(request, response, exception): c = { 'exception': exception.status } template = config.error_templates[404] t = jinja2.get_jinja2(app=app).render_template(template, **c) response.write(t) response.set_status(exception.status_int) app = webapp2.WSGIApplication(debug = os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=config.webapp2_config) app.error_handlers[404] = handle_404 routes.add_routes(app) 

Configuration file:

 error_templates = { 404: 'errors/default_error.html', 500: 'errors/default_error.html', } 

Here is the folder structure

enter image description here

Another important thing is that it works without problems on the local machine (SDK), but the problem arises in production

You can learn the full code because it is open source Thanks in advance for your help.

+4
source share
1 answer

I fixed it by removing "default_error" on app.yaml

And error handlers now only have:

 error_handlers: - error_code: over_quota file: templates/errors/over_quota.html - error_code: dos_api_denial file: templates/errors/dos_api_denial.html - error_code: timeout file: templates/errors/timeout.html 

I improved the code for 404 control errors by adding 500 errors using:

 def handle_error(request, response, exception): c = { 'exception': str(exception) } status_int = hasattr(exception, 'status_int') and exception.status_int or 500 template = config.error_templates[status_int] t = jinja2.get_jinja2(app=app).render_template(template, **c) response.write(t) response.set_status(status_int) app = webapp2.WSGIApplication(debug = os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=config.webapp2_config) app.error_handlers[404] = handle_error app.error_handlers[500] = handle_error 
+2
source

All Articles