How can I find out what 500 errors I get in Django?

When I visit the page (http://68.123.151.234/static/quickstart.html) in my Django application that runs on the server created by Django, the page reads

A server error occurred. Please contact the administrator. 

And I get this trace.

 Traceback (most recent call last): File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run self.result = application(self.environ, self.start_response) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__ response = self.get_response(request) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 153, in get_response response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception return callback(request, **param_dict) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 91, in _wrapped_view response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/defaults.py", line 32, in server_error t = loader.get_template(template_name) # You need to create a 500.html template. File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 145, in get_template template, origin = find_template(template_name) File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 138, in find_template raise TemplateDoesNotExist(name) TemplateDoesNotExist: 500.html [17/May/2012 11:31:45] "GET /static/quickstart.html HTTP/1.1" 500 59 Traceback (most recent call last): File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run self.result = application(self.environ, self.start_response) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__ response = self.get_response(request) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 153, in get_response response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception return callback(request, **param_dict) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 91, in _wrapped_view response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/defaults.py", line 32, in server_error t = loader.get_template(template_name) # You need to create a 500.html template. File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 145, in get_template template, origin = find_template(template_name) File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 138, in find_template raise TemplateDoesNotExist(name) TemplateDoesNotExist: 500.html 

This trace only tells me that I need a 500 pattern, not the actual server error. How to find out what a server error is?

I checked the Django documentation ( https://docs.djangoproject.com/en/1.4/topics/http/views/ ) which allows me to create a 500 error template as a potential solution. However, he does not give any instructions on how to display an error in such a template.

+6
source share
4 answers

The base 500.html, which is convenient and useful, could, as Alasdair said, potentially reveal something sensitive.

However, if the debugging task over the Internet is critical, the basic nondefault500.html template for your site template will look like

 <html><head><body> <!-- starting with sys.exc_info but hey, it python --> Type: {{ type }} <br /> Value: {{ value }} <br /> Traceback: {{ traceback }} <br /> </body></head></html> 

and a new handler will populate this context as such:

 def this_server_error(request, template_name='nondefault500.html'): """ 500 error handler. Templates: `500.html` Context: sys.exc_info() results """ t = loader.get_template(template_name) # You need to create a 500.html template. ltype,lvalue,ltraceback = sys.exc_info() sys.exc_clear() #for fun, and to point out I only -think- this hasn't happened at #this point in the process already return http.HttpResponseServerError(t.render(Context({'type':ltype,'value':lvalue,'traceback':ltraceback}))) 

and URLconf must be adjusted,

 handler500 = 'mysite.views.this_server_error' 
+7
source

If you are testing your site, set DEBUG=True , then Django will show the trace.

Once the site is live, you probably do not want to display the trace on the error page, as it may contain confidential information.

If you add 500 templates. Django will then send an email containing the trace to the users listed in ADMINS setup.

See the Error Reporting documents for more details.

+5
source

I believe you need the 500.html template if DEBUG set to False .

Create it and put it in the directory of your template

It will be shown to the user when a 500 error occurs.

+2
source
 TemplateDoesNotExist: 500.html 

I think you should create 500.html in your templates directory.

+1
source

Source: https://habr.com/ru/post/916009/


All Articles