<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>django.views.debug — Django 1.6.7 documentation</title> <link rel="stylesheet" href="../../../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../', VERSION: '1.6.7', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../_static/doctools.js"></script> <link rel="top" title="Django 1.6.7 documentation" href="../../../index.html" /> <link rel="up" title="django.views" href="../views.html" /> <script type="text/javascript" src="../../../templatebuiltins.js"></script> <script type="text/javascript"> (function($) { if (!django_template_builtins) { // templatebuiltins.js missing, do nothing. return; } $(document).ready(function() { // Hyperlink Django template tags and filters var base = "../../../ref/templates/builtins.html"; if (base == "#") { // Special case for builtins.html itself base = ""; } // Tags are keywords, class '.k' $("div.highlight\\-html\\+django span.k").each(function(i, elem) { var tagname = $(elem).text(); if ($.inArray(tagname, django_template_builtins.ttags) != -1) { var fragment = tagname.replace(/_/, '-'); $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>"); } }); // Filters are functions, class '.nf' $("div.highlight\\-html\\+django span.nf").each(function(i, elem) { var filtername = $(elem).text(); if ($.inArray(filtername, django_template_builtins.tfilters) != -1) { var fragment = filtername.replace(/_/, '-'); $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>"); } }); }); })(jQuery); </script> </head> <body> <div class="document"> <div id="custom-doc" class="yui-t6"> <div id="hd"> <h1><a href="../../../index.html">Django 1.6.7 documentation</a></h1> <div id="global-nav"> <a title="Home page" href="../../../index.html">Home</a> | <a title="Table of contents" href="../../../contents.html">Table of contents</a> | <a title="Global index" href="../../../genindex.html">Index</a> | <a title="Module index" href="../../../py-modindex.html">Modules</a> </div> <div class="nav"> <a href="../../index.html" title="Module code" accesskey="U">up</a></div> </div> <div id="bd"> <div id="yui-main"> <div class="yui-b"> <div class="yui-g" id="_modules-django-views-debug"> <h1>Source code for django.views.debug</h1><div class="highlight"><pre> <span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">unicode_literals</span> <span class="kn">import</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">re</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">types</span> <span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span> <span class="kn">from</span> <span class="nn">django.http</span> <span class="kn">import</span> <span class="p">(</span><span class="n">HttpResponse</span><span class="p">,</span> <span class="n">HttpResponseServerError</span><span class="p">,</span> <span class="n">HttpResponseNotFound</span><span class="p">,</span> <span class="n">HttpRequest</span><span class="p">,</span> <span class="n">build_request_repr</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">django.template</span> <span class="kn">import</span> <span class="n">Template</span><span class="p">,</span> <span class="n">Context</span><span class="p">,</span> <span class="n">TemplateDoesNotExist</span> <span class="kn">from</span> <span class="nn">django.template.defaultfilters</span> <span class="kn">import</span> <span class="n">force_escape</span><span class="p">,</span> <span class="n">pprint</span> <span class="kn">from</span> <span class="nn">django.utils.datastructures</span> <span class="kn">import</span> <span class="n">MultiValueDict</span> <span class="kn">from</span> <span class="nn">django.utils.html</span> <span class="kn">import</span> <span class="n">escape</span> <span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="kn">import</span> <span class="n">force_bytes</span><span class="p">,</span> <span class="n">smart_text</span> <span class="kn">from</span> <span class="nn">django.utils.module_loading</span> <span class="kn">import</span> <span class="n">import_by_path</span> <span class="kn">from</span> <span class="nn">django.utils</span> <span class="kn">import</span> <span class="n">six</span> <span class="n">HIDDEN_SETTINGS</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">'API|TOKEN|KEY|SECRET|PASS|PROFANITIES_LIST|SIGNATURE'</span><span class="p">)</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="o">=</span> <span class="s">'********************'</span> <span class="k">def</span> <span class="nf">linebreak_iter</span><span class="p">(</span><span class="n">template_source</span><span class="p">):</span> <span class="k">yield</span> <span class="mi">0</span> <span class="n">p</span> <span class="o">=</span> <span class="n">template_source</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span> <span class="k">while</span> <span class="n">p</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span> <span class="k">yield</span> <span class="n">p</span><span class="o">+</span><span class="mi">1</span> <span class="n">p</span> <span class="o">=</span> <span class="n">template_source</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span> <span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="k">yield</span> <span class="nb">len</span><span class="p">(</span><span class="n">template_source</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">def</span> <span class="nf">cleanse_setting</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""Cleanse an individual setting key/value of sensitive content.</span> <span class="sd"> If the value is a dictionary, recursively cleanse the keys in</span> <span class="sd"> that dictionary.</span> <span class="sd"> """</span> <span class="k">try</span><span class="p">:</span> <span class="k">if</span> <span class="n">HIDDEN_SETTINGS</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">k</span><span class="p">,</span> <span class="n">cleanse_setting</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">))</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> <span class="k">else</span><span class="p">:</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="n">value</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="c"># If the key isn't regex-able, just return as-is.</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="n">value</span> <span class="k">return</span> <span class="n">cleansed</span> <span class="k">def</span> <span class="nf">get_safe_settings</span><span class="p">():</span> <span class="s">"Returns a dictionary of the settings module, with sensitive settings blurred out."</span> <span class="n">settings_dict</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="n">settings</span><span class="p">):</span> <span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">isupper</span><span class="p">():</span> <span class="n">settings_dict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">cleanse_setting</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="n">k</span><span class="p">))</span> <span class="k">return</span> <span class="n">settings_dict</span> <span class="k">def</span> <span class="nf">technical_500_response</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">tb</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Create a technical server error response. The last three arguments are</span> <span class="sd"> the values returned from sys.exc_info() and friends.</span> <span class="sd"> """</span> <span class="n">reporter</span> <span class="o">=</span> <span class="n">ExceptionReporter</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">tb</span><span class="p">)</span> <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">is_ajax</span><span class="p">():</span> <span class="n">text</span> <span class="o">=</span> <span class="n">reporter</span><span class="o">.</span><span class="n">get_traceback_text</span><span class="p">()</span> <span class="k">return</span> <span class="n">HttpResponseServerError</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="s">'text/plain'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">html</span> <span class="o">=</span> <span class="n">reporter</span><span class="o">.</span><span class="n">get_traceback_html</span><span class="p">()</span> <span class="k">return</span> <span class="n">HttpResponseServerError</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="s">'text/html'</span><span class="p">)</span> <span class="c"># Cache for the default exception reporter filter instance.</span> <span class="n">default_exception_reporter_filter</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">def</span> <span class="nf">get_exception_reporter_filter</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> <span class="k">global</span> <span class="n">default_exception_reporter_filter</span> <span class="k">if</span> <span class="n">default_exception_reporter_filter</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># Load the default filter for the first time and cache it.</span> <span class="n">default_exception_reporter_filter</span> <span class="o">=</span> <span class="n">import_by_path</span><span class="p">(</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_EXCEPTION_REPORTER_FILTER</span><span class="p">)()</span> <span class="k">if</span> <span class="n">request</span><span class="p">:</span> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s">'exception_reporter_filter'</span><span class="p">,</span> <span class="n">default_exception_reporter_filter</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">default_exception_reporter_filter</span> <span class="k">class</span> <span class="nc">ExceptionReporterFilter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Base for all exception reporter filter classes. All overridable hooks</span> <span class="sd"> contain lenient default behaviors.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">get_request_repr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span> <span class="k">if</span> <span class="n">request</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">build_request_repr</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">POST_override</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_post_parameters</span><span class="p">(</span><span class="n">request</span><span class="p">))</span> <span class="k">def</span> <span class="nf">get_post_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span> <span class="k">if</span> <span class="n">request</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="p">{}</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="k">def</span> <span class="nf">get_traceback_frame_variables</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">tb_frame</span><span class="p">):</span> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">iteritems</span><span class="p">(</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="p">))</span> <div class="viewcode-block" id="SafeExceptionReporterFilter"><a class="viewcode-back" href="../../../howto/error-reporting.html#django.views.debug.SafeExceptionReporterFilter">[docs]</a><span class="k">class</span> <span class="nc">SafeExceptionReporterFilter</span><span class="p">(</span><span class="n">ExceptionReporterFilter</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Use annotations made by the sensitive_post_parameters and</span> <span class="sd"> sensitive_variables decorators to filter out sensitive information.</span> <span class="sd"> """</span> <div class="viewcode-block" id="SafeExceptionReporterFilter.is_active"><a class="viewcode-back" href="../../../howto/error-reporting.html#django.views.debug.SafeExceptionReporterFilter.is_active">[docs]</a> <span class="k">def</span> <span class="nf">is_active</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> This filter is to add safety in production environments (i.e. DEBUG</span> <span class="sd"> is False). If DEBUG is True then your site is not safe anyway.</span> <span class="sd"> This hook is provided as a convenience to easily activate or</span> <span class="sd"> deactivate the filter on a per request basis.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEBUG</span> <span class="ow">is</span> <span class="bp">False</span> </div> <span class="k">def</span> <span class="nf">get_cleansed_multivaluedict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">multivaluedict</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Replaces the keys in a MultiValueDict marked as sensitive with stars.</span> <span class="sd"> This mitigates leaking sensitive POST parameters if something like</span> <span class="sd"> request.POST['nonexistent_key'] throws an exception (#21098).</span> <span class="sd"> """</span> <span class="n">sensitive_post_parameters</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s">'sensitive_post_parameters'</span><span class="p">,</span> <span class="p">[])</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_active</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="ow">and</span> <span class="n">sensitive_post_parameters</span><span class="p">:</span> <span class="n">multivaluedict</span> <span class="o">=</span> <span class="n">multivaluedict</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">sensitive_post_parameters</span><span class="p">:</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">multivaluedict</span><span class="p">:</span> <span class="n">multivaluedict</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">return</span> <span class="n">multivaluedict</span> <div class="viewcode-block" id="SafeExceptionReporterFilter.get_post_parameters"><a class="viewcode-back" href="../../../howto/error-reporting.html#django.views.debug.SafeExceptionReporterFilter.get_post_parameters">[docs]</a> <span class="k">def</span> <span class="nf">get_post_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Replaces the values of POST parameters marked as sensitive with</span> <span class="sd"> stars (*********).</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">request</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="p">{}</span> <span class="k">else</span><span class="p">:</span> <span class="n">sensitive_post_parameters</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s">'sensitive_post_parameters'</span><span class="p">,</span> <span class="p">[])</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_active</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="ow">and</span> <span class="n">sensitive_post_parameters</span><span class="p">:</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">sensitive_post_parameters</span> <span class="o">==</span> <span class="s">'__ALL__'</span><span class="p">:</span> <span class="c"># Cleanse all parameters.</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">cleansed</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="n">cleansed</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">return</span> <span class="n">cleansed</span> <span class="k">else</span><span class="p">:</span> <span class="c"># Cleanse only the specified parameters.</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">sensitive_post_parameters</span><span class="p">:</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">cleansed</span><span class="p">:</span> <span class="n">cleansed</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">return</span> <span class="n">cleansed</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span> </div> <span class="k">def</span> <span class="nf">cleanse_special_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">HttpRequest</span><span class="p">):</span> <span class="c"># Cleanse the request's POST parameters.</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_request_repr</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">MultiValueDict</span><span class="p">):</span> <span class="c"># Cleanse MultiValueDicts (request.POST is the one we usually care about)</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cleansed_multivaluedict</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <div class="viewcode-block" id="SafeExceptionReporterFilter.get_traceback_frame_variables"><a class="viewcode-back" href="../../../howto/error-reporting.html#django.views.debug.SafeExceptionReporterFilter.get_traceback_frame_variables">[docs]</a> <span class="k">def</span> <span class="nf">get_traceback_frame_variables</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">tb_frame</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Replaces the values of variables marked as sensitive with</span> <span class="sd"> stars (*********).</span> <span class="sd"> """</span> <span class="c"># Loop through the frame's callers to see if the sensitive_variables</span> <span class="c"># decorator was used.</span> <span class="n">current_frame</span> <span class="o">=</span> <span class="n">tb_frame</span><span class="o">.</span><span class="n">f_back</span> <span class="n">sensitive_variables</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">while</span> <span class="n">current_frame</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">if</span> <span class="p">(</span><span class="n">current_frame</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_name</span> <span class="o">==</span> <span class="s">'sensitive_variables_wrapper'</span> <span class="ow">and</span> <span class="s">'sensitive_variables_wrapper'</span> <span class="ow">in</span> <span class="n">current_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="p">):</span> <span class="c"># The sensitive_variables decorator was used, so we take note</span> <span class="c"># of the sensitive variables' names.</span> <span class="n">wrapper</span> <span class="o">=</span> <span class="n">current_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="p">[</span><span class="s">'sensitive_variables_wrapper'</span><span class="p">]</span> <span class="n">sensitive_variables</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">wrapper</span><span class="p">,</span> <span class="s">'sensitive_variables'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">break</span> <span class="n">current_frame</span> <span class="o">=</span> <span class="n">current_frame</span><span class="o">.</span><span class="n">f_back</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_active</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="ow">and</span> <span class="n">sensitive_variables</span><span class="p">:</span> <span class="k">if</span> <span class="n">sensitive_variables</span> <span class="o">==</span> <span class="s">'__ALL__'</span><span class="p">:</span> <span class="c"># Cleanse all variables</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">tb_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="n">cleansed</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">else</span><span class="p">:</span> <span class="c"># Cleanse specified variables</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">tb_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">sensitive_variables</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">else</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleanse_special_types</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="n">cleansed</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> <span class="k">else</span><span class="p">:</span> <span class="c"># Potentially cleanse the request and any MultiValueDicts if they</span> <span class="c"># are one of the frame variables.</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">tb_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="n">cleansed</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleanse_special_types</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_name</span> <span class="o">==</span> <span class="s">'sensitive_variables_wrapper'</span> <span class="ow">and</span> <span class="s">'sensitive_variables_wrapper'</span> <span class="ow">in</span> <span class="n">tb_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="p">):</span> <span class="c"># For good measure, obfuscate the decorated function's arguments in</span> <span class="c"># the sensitive_variables decorator's frame, in case the variables</span> <span class="c"># associated with those arguments were meant to be obfuscated from</span> <span class="c"># the decorated function's frame.</span> <span class="n">cleansed</span><span class="p">[</span><span class="s">'func_args'</span><span class="p">]</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="n">cleansed</span><span class="p">[</span><span class="s">'func_kwargs'</span><span class="p">]</span> <span class="o">=</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="k">return</span> <span class="n">cleansed</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> </div></div> <span class="k">class</span> <span class="nc">ExceptionReporter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> A class to organize and coordinate reporting on exceptions.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">tb</span><span class="p">,</span> <span class="n">is_email</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span> <span class="o">=</span> <span class="n">request</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span> <span class="o">=</span> <span class="n">get_exception_reporter_filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span> <span class="o">=</span> <span class="n">exc_type</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span> <span class="o">=</span> <span class="n">exc_value</span> <span class="bp">self</span><span class="o">.</span><span class="n">tb</span> <span class="o">=</span> <span class="n">tb</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_email</span> <span class="o">=</span> <span class="n">is_email</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_info</span> <span class="o">=</span> <span class="bp">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_does_not_exist</span> <span class="o">=</span> <span class="bp">False</span> <span class="bp">self</span><span class="o">.</span><span class="n">loader_debug_info</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Handle deprecated string exceptions</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">string_types</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span> <span class="o">=</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'Deprecated String Exception: </span><span class="si">%r</span><span class="s">'</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">format_path_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> <span class="k">return</span> <span class="s">"File does not exist"</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> <span class="k">return</span> <span class="s">"Not a file"</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">R_OK</span><span class="p">):</span> <span class="k">return</span> <span class="s">"File is not readable"</span> <span class="k">return</span> <span class="s">"File exists"</span> <span class="k">def</span> <span class="nf">get_traceback_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="s">"Return a Context instance containing traceback information."</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="p">,</span> <span class="n">TemplateDoesNotExist</span><span class="p">):</span> <span class="kn">from</span> <span class="nn">django.template.loader</span> <span class="kn">import</span> <span class="n">template_source_loaders</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_does_not_exist</span> <span class="o">=</span> <span class="bp">True</span> <span class="bp">self</span><span class="o">.</span><span class="n">loader_debug_info</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># If the template_source_loaders haven't been populated yet, you need</span> <span class="c"># to provide an empty list for this for loop to not fail.</span> <span class="k">if</span> <span class="n">template_source_loaders</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">template_source_loaders</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">loader</span> <span class="ow">in</span> <span class="n">template_source_loaders</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="n">source_list_func</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">get_template_sources</span> <span class="c"># NOTE: This assumes exc_value is the name of the template that</span> <span class="c"># the loader attempted to load.</span> <span class="n">template_list</span> <span class="o">=</span> <span class="p">[{</span> <span class="s">'name'</span><span class="p">:</span> <span class="n">t</span><span class="p">,</span> <span class="s">'status'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_path_status</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="p">}</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">source_list_func</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">))]</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="n">template_list</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">loader_name</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">__module__</span> <span class="o">+</span> <span class="s">'.'</span> <span class="o">+</span> <span class="n">loader</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="bp">self</span><span class="o">.</span><span class="n">loader_debug_info</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> <span class="s">'loader'</span><span class="p">:</span> <span class="n">loader_name</span><span class="p">,</span> <span class="s">'templates'</span><span class="p">:</span> <span class="n">template_list</span><span class="p">,</span> <span class="p">})</span> <span class="k">if</span> <span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">TEMPLATE_DEBUG</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">,</span> <span class="s">'django_template_source'</span><span class="p">)):</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_template_exception_info</span><span class="p">()</span> <span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_traceback_frames</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">frame</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">frames</span><span class="p">):</span> <span class="k">if</span> <span class="s">'vars'</span> <span class="ow">in</span> <span class="n">frame</span><span class="p">:</span> <span class="n">frame</span><span class="p">[</span><span class="s">'vars'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span><span class="n">k</span><span class="p">,</span> <span class="n">force_escape</span><span class="p">(</span><span class="n">pprint</span><span class="p">(</span><span class="n">v</span><span class="p">)))</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">frame</span><span class="p">[</span><span class="s">'vars'</span><span class="p">]]</span> <span class="n">frames</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">frame</span> <span class="n">unicode_hint</span> <span class="o">=</span> <span class="s">''</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="p">,</span> <span class="ne">UnicodeError</span><span class="p">):</span> <span class="n">start</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">,</span> <span class="s">'start'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">end</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">,</span> <span class="s">'end'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">end</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">unicode_str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="n">unicode_hint</span> <span class="o">=</span> <span class="n">smart_text</span><span class="p">(</span><span class="n">unicode_str</span><span class="p">[</span><span class="nb">max</span><span class="p">(</span><span class="n">start</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span><span class="nb">min</span><span class="p">(</span><span class="n">end</span><span class="o">+</span><span class="mi">5</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">unicode_str</span><span class="p">))],</span> <span class="s">'ascii'</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s">'replace'</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">get_version</span> <span class="n">c</span> <span class="o">=</span> <span class="p">{</span> <span class="s">'is_email'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_email</span><span class="p">,</span> <span class="s">'unicode_hint'</span><span class="p">:</span> <span class="n">unicode_hint</span><span class="p">,</span> <span class="s">'frames'</span><span class="p">:</span> <span class="n">frames</span><span class="p">,</span> <span class="s">'request'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="s">'filtered_POST'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="o">.</span><span class="n">get_post_parameters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">),</span> <span class="s">'settings'</span><span class="p">:</span> <span class="n">get_safe_settings</span><span class="p">(),</span> <span class="s">'sys_executable'</span><span class="p">:</span> <span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s">'sys_version_info'</span><span class="p">:</span> <span class="s">'</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">'</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">],</span> <span class="s">'server_time'</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="s">'django_version_info'</span><span class="p">:</span> <span class="n">get_version</span><span class="p">(),</span> <span class="s">'sys_path'</span> <span class="p">:</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s">'template_info'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_info</span><span class="p">,</span> <span class="s">'template_does_not_exist'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_does_not_exist</span><span class="p">,</span> <span class="s">'loader_debug_info'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">loader_debug_info</span><span class="p">,</span> <span class="p">}</span> <span class="c"># Check whether exception info is available</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="p">:</span> <span class="n">c</span><span class="p">[</span><span class="s">'exception_type'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="o">.</span><span class="n">__name__</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">:</span> <span class="n">c</span><span class="p">[</span><span class="s">'exception_value'</span><span class="p">]</span> <span class="o">=</span> <span class="n">smart_text</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s">'replace'</span><span class="p">)</span> <span class="k">if</span> <span class="n">frames</span><span class="p">:</span> <span class="n">c</span><span class="p">[</span><span class="s">'lastframe'</span><span class="p">]</span> <span class="o">=</span> <span class="n">frames</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">return</span> <span class="n">c</span> <span class="k">def</span> <span class="nf">get_traceback_html</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="s">"Return HTML version of debug 500 HTTP error page."</span> <span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">TECHNICAL_500_TEMPLATE</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'Technical 500 template'</span><span class="p">)</span> <span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_traceback_data</span><span class="p">())</span> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">def</span> <span class="nf">get_traceback_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="s">"Return plain text version of debug 500 HTTP error page."</span> <span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">TECHNICAL_500_TEXT_TEMPLATE</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'Technical 500 template'</span><span class="p">)</span> <span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_traceback_data</span><span class="p">(),</span> <span class="n">autoescape</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">def</span> <span class="nf">get_template_exception_info</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">origin</span><span class="p">,</span> <span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="o">.</span><span class="n">django_template_source</span> <span class="n">template_source</span> <span class="o">=</span> <span class="n">origin</span><span class="o">.</span><span class="n">reload</span><span class="p">()</span> <span class="n">context_lines</span> <span class="o">=</span> <span class="mi">10</span> <span class="n">line</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">upto</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">source_lines</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">before</span> <span class="o">=</span> <span class="n">during</span> <span class="o">=</span> <span class="n">after</span> <span class="o">=</span> <span class="s">""</span> <span class="k">for</span> <span class="n">num</span><span class="p">,</span> <span class="nb">next</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">linebreak_iter</span><span class="p">(</span><span class="n">template_source</span><span class="p">)):</span> <span class="k">if</span> <span class="n">start</span> <span class="o">>=</span> <span class="n">upto</span> <span class="ow">and</span> <span class="n">end</span> <span class="o"><=</span> <span class="nb">next</span><span class="p">:</span> <span class="n">line</span> <span class="o">=</span> <span class="n">num</span> <span class="n">before</span> <span class="o">=</span> <span class="n">escape</span><span class="p">(</span><span class="n">template_source</span><span class="p">[</span><span class="n">upto</span><span class="p">:</span><span class="n">start</span><span class="p">])</span> <span class="n">during</span> <span class="o">=</span> <span class="n">escape</span><span class="p">(</span><span class="n">template_source</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">])</span> <span class="n">after</span> <span class="o">=</span> <span class="n">escape</span><span class="p">(</span><span class="n">template_source</span><span class="p">[</span><span class="n">end</span><span class="p">:</span><span class="nb">next</span><span class="p">])</span> <span class="n">source_lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">escape</span><span class="p">(</span><span class="n">template_source</span><span class="p">[</span><span class="n">upto</span><span class="p">:</span><span class="nb">next</span><span class="p">]))</span> <span class="p">)</span> <span class="n">upto</span> <span class="o">=</span> <span class="nb">next</span> <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">source_lines</span><span class="p">)</span> <span class="n">top</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">line</span> <span class="o">-</span> <span class="n">context_lines</span><span class="p">)</span> <span class="n">bottom</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">total</span><span class="p">,</span> <span class="n">line</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">context_lines</span><span class="p">)</span> <span class="c"># In some rare cases, exc_value.args might be empty.</span> <span class="k">try</span><span class="p">:</span> <span class="n">message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="n">message</span> <span class="o">=</span> <span class="s">'(Could not get exception message)'</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_info</span> <span class="o">=</span> <span class="p">{</span> <span class="s">'message'</span><span class="p">:</span> <span class="n">message</span><span class="p">,</span> <span class="s">'source_lines'</span><span class="p">:</span> <span class="n">source_lines</span><span class="p">[</span><span class="n">top</span><span class="p">:</span><span class="n">bottom</span><span class="p">],</span> <span class="s">'before'</span><span class="p">:</span> <span class="n">before</span><span class="p">,</span> <span class="s">'during'</span><span class="p">:</span> <span class="n">during</span><span class="p">,</span> <span class="s">'after'</span><span class="p">:</span> <span class="n">after</span><span class="p">,</span> <span class="s">'top'</span><span class="p">:</span> <span class="n">top</span><span class="p">,</span> <span class="s">'bottom'</span><span class="p">:</span> <span class="n">bottom</span><span class="p">,</span> <span class="s">'total'</span><span class="p">:</span> <span class="n">total</span><span class="p">,</span> <span class="s">'line'</span><span class="p">:</span> <span class="n">line</span><span class="p">,</span> <span class="s">'name'</span><span class="p">:</span> <span class="n">origin</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">_get_lines_from_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">lineno</span><span class="p">,</span> <span class="n">context_lines</span><span class="p">,</span> <span class="n">loader</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Returns context_lines before and after lineno from file.</span> <span class="sd"> Returns (pre_context_lineno, pre_context, context_line, post_context).</span> <span class="sd"> """</span> <span class="n">source</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="n">loader</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">loader</span><span class="p">,</span> <span class="s">"get_source"</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">source</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">get_source</span><span class="p">(</span><span class="n">module_name</span><span class="p">)</span> <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="k">pass</span> <span class="k">if</span> <span class="n">source</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">source</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="k">if</span> <span class="n">source</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fp</span><span class="p">:</span> <span class="n">source</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="k">except</span> <span class="p">(</span><span class="ne">OSError</span><span class="p">,</span> <span class="ne">IOError</span><span class="p">):</span> <span class="k">pass</span> <span class="k">if</span> <span class="n">source</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span><span class="p">,</span> <span class="p">[],</span> <span class="bp">None</span><span class="p">,</span> <span class="p">[]</span> <span class="c"># If we just read the source from a file, or if the loader did not</span> <span class="c"># apply tokenize.detect_encoding to decode the source into a Unicode</span> <span class="c"># string, then we should do that ourselves.</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">six</span><span class="o">.</span><span class="n">binary_type</span><span class="p">):</span> <span class="n">encoding</span> <span class="o">=</span> <span class="s">'ascii'</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">source</span><span class="p">[:</span><span class="mi">2</span><span class="p">]:</span> <span class="c"># File coding may be specified. Match pattern from PEP-263</span> <span class="c"># (http://www.python.org/dev/peps/pep-0263/)</span> <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">br</span><span class="s">'coding[:=]\s*([-\w.]+)'</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="k">if</span> <span class="n">match</span><span class="p">:</span> <span class="n">encoding</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s">'ascii'</span><span class="p">)</span> <span class="k">break</span> <span class="n">source</span> <span class="o">=</span> <span class="p">[</span><span class="n">six</span><span class="o">.</span><span class="n">text_type</span><span class="p">(</span><span class="n">sline</span><span class="p">,</span> <span class="n">encoding</span><span class="p">,</span> <span class="s">'replace'</span><span class="p">)</span> <span class="k">for</span> <span class="n">sline</span> <span class="ow">in</span> <span class="n">source</span><span class="p">]</span> <span class="n">lower_bound</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">lineno</span> <span class="o">-</span> <span class="n">context_lines</span><span class="p">)</span> <span class="n">upper_bound</span> <span class="o">=</span> <span class="n">lineno</span> <span class="o">+</span> <span class="n">context_lines</span> <span class="n">pre_context</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="n">lower_bound</span><span class="p">:</span><span class="n">lineno</span><span class="p">]</span> <span class="n">context_line</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="n">lineno</span><span class="p">]</span> <span class="n">post_context</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="n">lineno</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">upper_bound</span><span class="p">]</span> <span class="k">return</span> <span class="n">lower_bound</span><span class="p">,</span> <span class="n">pre_context</span><span class="p">,</span> <span class="n">context_line</span><span class="p">,</span> <span class="n">post_context</span> <span class="k">def</span> <span class="nf">get_traceback_frames</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">frames</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">tb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tb</span> <span class="k">while</span> <span class="n">tb</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># Support for __traceback_hide__ which is used by a few libraries</span> <span class="c"># to hide internal frames.</span> <span class="k">if</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_locals</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'__traceback_hide__'</span><span class="p">):</span> <span class="n">tb</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_next</span> <span class="k">continue</span> <span class="n">filename</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_filename</span> <span class="n">function</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_name</span> <span class="n">lineno</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_lineno</span> <span class="o">-</span> <span class="mi">1</span> <span class="n">loader</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_globals</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'__loader__'</span><span class="p">)</span> <span class="n">module_name</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_frame</span><span class="o">.</span><span class="n">f_globals</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'__name__'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</span> <span class="n">pre_context_lineno</span><span class="p">,</span> <span class="n">pre_context</span><span class="p">,</span> <span class="n">context_line</span><span class="p">,</span> <span class="n">post_context</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_lines_from_file</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">lineno</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="n">loader</span><span class="p">,</span> <span class="n">module_name</span><span class="p">)</span> <span class="k">if</span> <span class="n">pre_context_lineno</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">frames</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> <span class="s">'tb'</span><span class="p">:</span> <span class="n">tb</span><span class="p">,</span> <span class="s">'type'</span><span class="p">:</span> <span class="s">'django'</span> <span class="k">if</span> <span class="n">module_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'django.'</span><span class="p">)</span> <span class="k">else</span> <span class="s">'user'</span><span class="p">,</span> <span class="s">'filename'</span><span class="p">:</span> <span class="n">filename</span><span class="p">,</span> <span class="s">'function'</span><span class="p">:</span> <span class="n">function</span><span class="p">,</span> <span class="s">'lineno'</span><span class="p">:</span> <span class="n">lineno</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="s">'vars'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="o">.</span><span class="n">get_traceback_frame_variables</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_frame</span><span class="p">),</span> <span class="s">'id'</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">tb</span><span class="p">),</span> <span class="s">'pre_context'</span><span class="p">:</span> <span class="n">pre_context</span><span class="p">,</span> <span class="s">'context_line'</span><span class="p">:</span> <span class="n">context_line</span><span class="p">,</span> <span class="s">'post_context'</span><span class="p">:</span> <span class="n">post_context</span><span class="p">,</span> <span class="s">'pre_context_lineno'</span><span class="p">:</span> <span class="n">pre_context_lineno</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="p">})</span> <span class="n">tb</span> <span class="o">=</span> <span class="n">tb</span><span class="o">.</span><span class="n">tb_next</span> <span class="k">return</span> <span class="n">frames</span> <span class="k">def</span> <span class="nf">format_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Return the same data as from traceback.format_exception.</span> <span class="sd"> """</span> <span class="kn">import</span> <span class="nn">traceback</span> <span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_traceback_frames</span><span class="p">()</span> <span class="n">tb</span> <span class="o">=</span> <span class="p">[</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="s">'filename'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">'lineno'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">'function'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">'context_line'</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">frames</span> <span class="p">]</span> <span class="nb">list</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Traceback (most recent call last):</span><span class="se">\n</span><span class="s">'</span><span class="p">]</span> <span class="nb">list</span> <span class="o">+=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_list</span><span class="p">(</span><span class="n">tb</span><span class="p">)</span> <span class="nb">list</span> <span class="o">+=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exception_only</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exc_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span> <span class="k">return</span> <span class="nb">list</span> <span class="k">def</span> <span class="nf">technical_404_response</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span> <span class="s">"Create a technical 404 error response. The exception should be the Http404."</span> <span class="k">try</span><span class="p">:</span> <span class="n">tried</span> <span class="o">=</span> <span class="n">exception</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">'tried'</span><span class="p">]</span> <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">):</span> <span class="n">tried</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">tried</span> <span class="c"># empty URLconf</span> <span class="ow">or</span> <span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="s">'/'</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tried</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="c"># default URLconf</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tried</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">tried</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="s">'app_name'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> <span class="o">==</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">tried</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="s">'namespace'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> <span class="o">==</span> <span class="s">'admin'</span><span class="p">)):</span> <span class="k">return</span> <span class="n">default_urlconf</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="n">urlconf</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s">'urlconf'</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">ROOT_URLCONF</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">urlconf</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">ModuleType</span><span class="p">):</span> <span class="n">urlconf</span> <span class="o">=</span> <span class="n">urlconf</span><span class="o">.</span><span class="n">__name__</span> <span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">TECHNICAL_404_TEMPLATE</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'Technical 404 template'</span><span class="p">)</span> <span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span> <span class="s">'urlconf'</span><span class="p">:</span> <span class="n">urlconf</span><span class="p">,</span> <span class="s">'root_urlconf'</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">ROOT_URLCONF</span><span class="p">,</span> <span class="s">'request_path'</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">path_info</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="c"># Trim leading slash</span> <span class="s">'urlpatterns'</span><span class="p">:</span> <span class="n">tried</span><span class="p">,</span> <span class="s">'reason'</span><span class="p">:</span> <span class="n">force_bytes</span><span class="p">(</span><span class="n">exception</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s">'replace'</span><span class="p">),</span> <span class="s">'request'</span><span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="s">'settings'</span><span class="p">:</span> <span class="n">get_safe_settings</span><span class="p">(),</span> <span class="p">})</span> <span class="k">return</span> <span class="n">HttpResponseNotFound</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">content_type</span><span class="o">=</span><span class="s">'text/html'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">default_urlconf</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> <span class="s">"Create an empty URLconf 404 error response."</span> <span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">DEFAULT_URLCONF_TEMPLATE</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'Default URLconf template'</span><span class="p">)</span> <span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({})</span> <span class="k">return</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">content_type</span><span class="o">=</span><span class="s">'text/html'</span><span class="p">)</span> <span class="c">#</span> <span class="c"># Templates are embedded in the file so that we know the error handler will</span> <span class="c"># always work even if the template loader is broken.</span> <span class="c">#</span> <span class="n">TECHNICAL_500_TEMPLATE</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"><!DOCTYPE html></span> <span class="s"><html lang="en"></span> <span class="s"><head></span> <span class="s"> <meta http-equiv="content-type" content="text/html; charset=utf-8"></span> <span class="s"> <meta name="robots" content="NONE,NOARCHIVE"></span> <span class="s"> <title>{</span><span class="si">% i</span><span class="s">f exception_type %}{{ exception_type }}{</span><span class="si">% e</span><span class="s">lse %}Report{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% i</span><span class="s">f request %} at {{ request.path_info|escape }}{</span><span class="si">% e</span><span class="s">ndif %}</title></span> <span class="s"> <style type="text/css"></span> <span class="s"> html * { padding:0; margin:0; }</span> <span class="s"> body * { padding:10px 20px; }</span> <span class="s"> body * * { padding:0; }</span> <span class="s"> body { font:small sans-serif; }</span> <span class="s"> body>div { border-bottom:1px solid #ddd; }</span> <span class="s"> h1 { font-weight:normal; }</span> <span class="s"> h2 { margin-bottom:.8em; }</span> <span class="s"> h2 span { font-size:80%; color:#666; font-weight:normal; }</span> <span class="s"> h3 { margin:1em 0 .5em 0; }</span> <span class="s"> h4 { margin:0 0 .5em 0; font-weight: normal; }</span> <span class="s"> code, pre { font-size: 100%; white-space: pre-wrap; }</span> <span class="s"> table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }</span> <span class="s"> tbody td, tbody th { vertical-align:top; padding:2px 3px; }</span> <span class="s"> thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }</span> <span class="s"> tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }</span> <span class="s"> table.vars { margin:5px 0 2px 40px; }</span> <span class="s"> table.vars td, table.req td { font-family:monospace; }</span> <span class="s"> table td.code { width:100%; }</span> <span class="s"> table td.code pre { overflow:hidden; }</span> <span class="s"> table.source th { color:#666; }</span> <span class="s"> table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }</span> <span class="s"> ul.traceback { list-style-type:none; color: #222; }</span> <span class="s"> ul.traceback li.frame { padding-bottom:1em; color:#666; }</span> <span class="s"> ul.traceback li.user { background-color:#e0e0e0; color:#000 }</span> <span class="s"> div.context { padding:10px 0; overflow:hidden; }</span> <span class="s"> div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }</span> <span class="s"> div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; }</span> <span class="s"> div.context ol li pre { display:inline; }</span> <span class="s"> div.context ol.context-line li { color:#505050; background-color:#dfdfdf; }</span> <span class="s"> div.context ol.context-line li span { position:absolute; right:32px; }</span> <span class="s"> .user div.context ol.context-line li { background-color:#bbb; color:#000; }</span> <span class="s"> .user div.context ol li { color:#666; }</span> <span class="s"> div.commands { margin-left: 40px; }</span> <span class="s"> div.commands a { color:#555; text-decoration:none; }</span> <span class="s"> .user div.commands a { color: black; }</span> <span class="s"> #summary { background: #ffc; }</span> <span class="s"> #summary h2 { font-weight: normal; color: #666; }</span> <span class="s"> #explanation { background:#eee; }</span> <span class="s"> #template, #template-not-exist { background:#f6f6f6; }</span> <span class="s"> #template-not-exist ul { margin: 0 0 0 20px; }</span> <span class="s"> #unicode-hint { background:#eee; }</span> <span class="s"> #traceback { background:#eee; }</span> <span class="s"> #requestinfo { background:#f6f6f6; padding-left:120px; }</span> <span class="s"> #summary table { border:none; background:transparent; }</span> <span class="s"> #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }</span> <span class="s"> #requestinfo h3 { margin-bottom:-1em; }</span> <span class="s"> .error { background: #ffc; }</span> <span class="s"> .specific { color:#cc3300; font-weight:bold; }</span> <span class="s"> h2 span.commands { font-size:.7em;}</span> <span class="s"> span.commands a:link {color:#5E5694;}</span> <span class="s"> pre.exception_value { font-family: sans-serif; color: #666; font-size: 1.5em; margin: 10px 0 10px 0; }</span> <span class="s"> </style></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f not is_email %}</span> <span class="s"> <script type="text/javascript"></span> <span class="s"> //<!--</span> <span class="s"> function getElementsByClassName(oElm, strTagName, strClassName){</span> <span class="s"> // Written by Jonathan Snook, http://www.snook.ca/jon; Add-ons by Robert Nyman, http://www.robertnyman.com</span> <span class="s"> var arrElements = (strTagName == "*" && document.all)? document.all :</span> <span class="s"> oElm.getElementsByTagName(strTagName);</span> <span class="s"> var arrReturnElements = new Array();</span> <span class="s"> strClassName = strClassName.replace(/\-/g, "</span><span class="se">\\</span><span class="s">-");</span> <span class="s"> var oRegExp = new RegExp("(^|</span><span class="se">\\</span><span class="s">s)" + strClassName + "(</span><span class="se">\\</span><span class="s">s|$)");</span> <span class="s"> var oElement;</span> <span class="s"> for(var i=0; i<arrElements.length; i++){</span> <span class="s"> oElement = arrElements[i];</span> <span class="s"> if(oRegExp.test(oElement.className)){</span> <span class="s"> arrReturnElements.push(oElement);</span> <span class="s"> }</span> <span class="s"> }</span> <span class="s"> return (arrReturnElements)</span> <span class="s"> }</span> <span class="s"> function hideAll(elems) {</span> <span class="s"> for (var e = 0; e < elems.length; e++) {</span> <span class="s"> elems[e].style.display = 'none';</span> <span class="s"> }</span> <span class="s"> }</span> <span class="s"> window.onload = function() {</span> <span class="s"> hideAll(getElementsByClassName(document, 'table', 'vars'));</span> <span class="s"> hideAll(getElementsByClassName(document, 'ol', 'pre-context'));</span> <span class="s"> hideAll(getElementsByClassName(document, 'ol', 'post-context'));</span> <span class="s"> hideAll(getElementsByClassName(document, 'div', 'pastebin'));</span> <span class="s"> }</span> <span class="s"> function toggle() {</span> <span class="s"> for (var i = 0; i < arguments.length; i++) {</span> <span class="s"> var e = document.getElementById(arguments[i]);</span> <span class="s"> if (e) {</span> <span class="s"> e.style.display = e.style.display == 'none' ? 'block' : 'none';</span> <span class="s"> }</span> <span class="s"> }</span> <span class="s"> return false;</span> <span class="s"> }</span> <span class="s"> function varToggle(link, id) {</span> <span class="s"> toggle('v' + id);</span> <span class="s"> var s = link.getElementsByTagName('span')[0];</span> <span class="s"> var uarr = String.fromCharCode(0x25b6);</span> <span class="s"> var darr = String.fromCharCode(0x25bc);</span> <span class="s"> s.innerHTML = s.innerHTML == uarr ? darr : uarr;</span> <span class="s"> return false;</span> <span class="s"> }</span> <span class="s"> function switchPastebinFriendly(link) {</span> <span class="s"> s1 = "Switch to copy-and-paste view";</span> <span class="s"> s2 = "Switch back to interactive view";</span> <span class="s"> link.innerHTML = link.innerHTML == s1 ? s2 : s1;</span> <span class="s"> toggle('browserTraceback', 'pastebinTraceback');</span> <span class="s"> return false;</span> <span class="s"> }</span> <span class="s"> //--></span> <span class="s"> </script></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"></head></span> <span class="s"><body></span> <span class="s"><div id="summary"></span> <span class="s"> <h1>{</span><span class="si">% i</span><span class="s">f exception_type %}{{ exception_type }}{</span><span class="si">% e</span><span class="s">lse %}Report{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% i</span><span class="s">f request %} at {{ request.path_info|escape }}{</span><span class="si">% e</span><span class="s">ndif %}</h1></span> <span class="s"> <pre class="exception_value">{</span><span class="si">% i</span><span class="s">f exception_value %}{{ exception_value|force_escape }}{</span><span class="si">% e</span><span class="s">lse %}No exception message supplied{</span><span class="si">% e</span><span class="s">ndif %}</pre></span> <span class="s"> <table class="meta"></span> <span class="s">{</span><span class="si">% i</span><span class="s">f request %}</span> <span class="s"> <tr></span> <span class="s"> <th>Request Method:</th></span> <span class="s"> <td>{{ request.META.REQUEST_METHOD }}</td></span> <span class="s"> </tr></span> <span class="s"> <tr></span> <span class="s"> <th>Request URL:</th></span> <span class="s"> <td>{{ request.build_absolute_uri|escape }}</td></span> <span class="s"> </tr></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <tr></span> <span class="s"> <th>Django Version:</th></span> <span class="s"> <td>{{ django_version_info }}</td></span> <span class="s"> </tr></span> <span class="s">{</span><span class="si">% i</span><span class="s">f exception_type %}</span> <span class="s"> <tr></span> <span class="s"> <th>Exception Type:</th></span> <span class="s"> <td>{{ exception_type }}</td></span> <span class="s"> </tr></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f exception_type and exception_value %}</span> <span class="s"> <tr></span> <span class="s"> <th>Exception Value:</th></span> <span class="s"> <td><pre>{{ exception_value|force_escape }}</pre></td></span> <span class="s"> </tr></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f lastframe %}</span> <span class="s"> <tr></span> <span class="s"> <th>Exception Location:</th></span> <span class="s"> <td>{{ lastframe.filename|escape }} in {{ lastframe.function|escape }}, line {{ lastframe.lineno }}</td></span> <span class="s"> </tr></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <tr></span> <span class="s"> <th>Python Executable:</th></span> <span class="s"> <td>{{ sys_executable|escape }}</td></span> <span class="s"> </tr></span> <span class="s"> <tr></span> <span class="s"> <th>Python Version:</th></span> <span class="s"> <td>{{ sys_version_info }}</td></span> <span class="s"> </tr></span> <span class="s"> <tr></span> <span class="s"> <th>Python Path:</th></span> <span class="s"> <td><pre>{{ sys_path|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> <tr></span> <span class="s"> <th>Server time:</th></span> <span class="s"> <td>{{server_time|date:"r"}}</td></span> <span class="s"> </tr></span> <span class="s"> </table></span> <span class="s"></div></span> <span class="s">{</span><span class="si">% i</span><span class="s">f unicode_hint %}</span> <span class="s"><div id="unicode-hint"></span> <span class="s"> <h2>Unicode error hint</h2></span> <span class="s"> <p>The string that could not be encoded/decoded was: <strong>{{ unicode_hint|force_escape }}</strong></p></span> <span class="s"></div></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f template_does_not_exist %}</span> <span class="s"><div id="template-not-exist"></span> <span class="s"> <h2>Template-loader postmortem</h2></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f loader_debug_info %}</span> <span class="s"> <p>Django tried loading these templates, in this order:</p></span> <span class="s"> <ul></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or loader in loader_debug_info %}</span> <span class="s"> <li>Using loader <code>{{ loader.loader }}</code>:</span> <span class="s"> <ul></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or t in loader.templates %}<li><code>{{ t.name }}</code> ({{ t.status }})</li>{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </ul></span> <span class="s"> </li></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </ul></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>Django couldn't find any templates because your <code>TEMPLATE_LOADERS</code> setting is empty!</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"></div></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f template_info %}</span> <span class="s"><div id="template"></span> <span class="s"> <h2>Error during template rendering</h2></span> <span class="s"> <p>In template <code>{{ template_info.name }}</code>, error at line <strong>{{ template_info.line }}</strong></p></span> <span class="s"> <h3>{{ template_info.message }}</h3></span> <span class="s"> <table class="source{</span><span class="si">% i</span><span class="s">f template_info.top %} cut-top{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% i</span><span class="s">fnotequal template_info.bottom template_info.total %} cut-bottom{</span><span class="si">% e</span><span class="s">ndifnotequal %}"></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or source_line in template_info.source_lines %}</span> <span class="s"> {</span><span class="si">% i</span><span class="s">fequal source_line.0 template_info.line %}</span> <span class="s"> <tr class="error"><th>{{ source_line.0 }}</th></span> <span class="s"> <td>{{ template_info.before }}<span class="specific">{{ template_info.during }}</span>{{ template_info.after }}</td></tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <tr><th>{{ source_line.0 }}</th></span> <span class="s"> <td>{{ source_line.1 }}</td></tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndifequal %}</span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </table></span> <span class="s"></div></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f frames %}</span> <span class="s"><div id="traceback"></span> <span class="s"> <h2>Traceback <span class="commands">{</span><span class="si">% i</span><span class="s">f not is_email %}<a href="#" onclick="return switchPastebinFriendly(this);">Switch to copy-and-paste view</a></span>{</span><span class="si">% e</span><span class="s">ndif %}</h2></span> <span class="s"> {% autoescape off %}</span> <span class="s"> <div id="browserTraceback"></span> <span class="s"> <ul class="traceback"></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or frame in frames %}</span> <span class="s"> <li class="frame {{ frame.type }}"></span> <span class="s"> <code>{{ frame.filename|escape }}</code> in <code>{{ frame.function|escape }}</code></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f frame.context_line %}</span> <span class="s"> <div class="context" id="c{{ frame.id }}"></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f frame.pre_context and not is_email %}</span> <span class="s"> <ol start="{{ frame.pre_context_lineno }}" class="pre-context" id="pre{{ frame.id }}">{</span><span class="si">% f</span><span class="s">or line in frame.pre_context %}<li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ line|escape }}</pre></li>{</span><span class="si">% e</span><span class="s">ndfor %}</ol></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <ol start="{{ frame.lineno }}" class="context-line"><li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ frame.context_line|escape }}</pre>{</span><span class="si">% i</span><span class="s">f not is_email %} <span>...</span>{</span><span class="si">% e</span><span class="s">ndif %}</li></ol></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f frame.post_context and not is_email %}</span> <span class="s"> <ol start='{{ frame.lineno|add:"1" }}' class="post-context" id="post{{ frame.id }}">{</span><span class="si">% f</span><span class="s">or line in frame.post_context %}<li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ line|escape }}</pre></li>{</span><span class="si">% e</span><span class="s">ndfor %}</ol></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> </div></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> {</span><span class="si">% i</span><span class="s">f frame.vars %}</span> <span class="s"> <div class="commands"></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f is_email %}</span> <span class="s"> <h2>Local Vars</h2></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <a href="#" onclick="return varToggle(this, '{{ frame.id }}')"><span>&#x25b6;</span> Local vars</a></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> </div></span> <span class="s"> <table class="vars" id="v{{ frame.id }}"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Variable</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in frame.vars|dictsort:"0" %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0|force_escape }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1 }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> </li></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </ul></span> <span class="s"> </div></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndautoescape %}</span> <span class="s"> <form action="http://dpaste.com/" name="pasteform" id="pasteform" method="post"></span> <span class="s">{</span><span class="si">% i</span><span class="s">f not is_email %}</span> <span class="s"> <div id="pastebinTraceback" class="pastebin"></span> <span class="s"> <input type="hidden" name="language" value="PythonConsole"></span> <span class="s"> <input type="hidden" name="title" value="{{ exception_type|escape }}{</span><span class="si">% i</span><span class="s">f request %} at {{ request.path_info|escape }}{</span><span class="si">% e</span><span class="s">ndif %}"></span> <span class="s"> <input type="hidden" name="source" value="Django Dpaste Agent"></span> <span class="s"> <input type="hidden" name="poster" value="Django"></span> <span class="s"> <textarea name="content" id="traceback_area" cols="140" rows="25"></span> <span class="s">Environment:</span> <span class="s">{</span><span class="si">% i</span><span class="s">f request %}</span> <span class="s">Request Method: {{ request.META.REQUEST_METHOD }}</span> <span class="s">Request URL: {{ request.build_absolute_uri|escape }}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">Django Version: {{ django_version_info }}</span> <span class="s">Python Version: {{ sys_version_info }}</span> <span class="s">Installed Applications:</span> <span class="s">{{ settings.INSTALLED_APPS|pprint }}</span> <span class="s">Installed Middleware:</span> <span class="s">{{ settings.MIDDLEWARE_CLASSES|pprint }}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f template_does_not_exist %}Template Loader Error:</span> <span class="s">{</span><span class="si">% i</span><span class="s">f loader_debug_info %}Django tried loading these templates, in this order:</span> <span class="s">{</span><span class="si">% f</span><span class="s">or loader in loader_debug_info %}Using loader {{ loader.loader }}:</span> <span class="s">{</span><span class="si">% f</span><span class="s">or t in loader.templates %}{{ t.name }} ({{ t.status }})</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndfor %}{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">lse %}Django couldn't find any templates because your TEMPLATE_LOADERS setting is empty!</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% i</span><span class="s">f template_info %}</span> <span class="s">Template error:</span> <span class="s">In template {{ template_info.name }}, error at line {{ template_info.line }}</span> <span class="s"> {{ template_info.message }}{</span><span class="si">% f</span><span class="s">or source_line in template_info.source_lines %}{</span><span class="si">% i</span><span class="s">fequal source_line.0 template_info.line %}</span> <span class="s"> {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}</span> <span class="s">{</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> {{ source_line.0 }} : {{ source_line.1 }}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndifequal %}{</span><span class="si">% e</span><span class="s">ndfor %}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">Traceback:</span> <span class="s">{</span><span class="si">% f</span><span class="s">or frame in frames %}File "{{ frame.filename|escape }}" in {{ frame.function|escape }}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f frame.context_line %} {{ frame.lineno }}. {{ frame.context_line|escape }}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">Exception Type: {{ exception_type|escape }}{</span><span class="si">% i</span><span class="s">f request %} at {{ request.path_info|escape }}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">Exception Value: {{ exception_value|force_escape }}</span> <span class="s"></textarea></span> <span class="s"> <br><br></span> <span class="s"> <input type="submit" value="Share this traceback on a public Web site"></span> <span class="s"> </div></span> <span class="s"></form></span> <span class="s"></div></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"><div id="requestinfo"></span> <span class="s"> <h2>Request information</h2></span> <span class="s">{</span><span class="si">% i</span><span class="s">f request %}</span> <span class="s"> <h3 id="get-info">GET</h3></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f request.GET %}</span> <span class="s"> <table class="req"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Variable</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in request.GET.items %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0 }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>No GET data</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <h3 id="post-info">POST</h3></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f filtered_POST %}</span> <span class="s"> <table class="req"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Variable</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in filtered_POST.items %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0 }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>No POST data</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <h3 id="files-info">FILES</h3></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f request.FILES %}</span> <span class="s"> <table class="req"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Variable</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in request.FILES.items %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0 }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>No FILES data</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <h3 id="cookie-info">COOKIES</h3></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f request.COOKIES %}</span> <span class="s"> <table class="req"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Variable</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in request.COOKIES.items %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0 }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>No cookie data</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <h3 id="meta-info">META</h3></span> <span class="s"> <table class="req"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Variable</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in request.META.items|dictsort:"0" %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0 }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s">{</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>Request data not supplied</p></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> <h3 id="settings-info">Settings</h3></span> <span class="s"> <h4>Using settings module <code>{{ settings.SETTINGS_MODULE }}</code></h4></span> <span class="s"> <table class="req"></span> <span class="s"> <thead></span> <span class="s"> <tr></span> <span class="s"> <th>Setting</th></span> <span class="s"> <th>Value</th></span> <span class="s"> </tr></span> <span class="s"> </thead></span> <span class="s"> <tbody></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or var in settings.items|dictsort:"0" %}</span> <span class="s"> <tr></span> <span class="s"> <td>{{ var.0 }}</td></span> <span class="s"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="s"> </tr></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </tbody></span> <span class="s"> </table></span> <span class="s"></div></span> <span class="s">{</span><span class="si">% i</span><span class="s">f not is_email %}</span> <span class="s"> <div id="explanation"></span> <span class="s"> <p></span> <span class="s"> You're seeing this error because you have <code>DEBUG = True</code> in your</span> <span class="s"> Django settings file. Change that to <code>False</code>, and Django will</span> <span class="s"> display a standard 500 page.</span> <span class="s"> </p></span> <span class="s"> </div></span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"></body></span> <span class="s"></html></span> <span class="s">"""</span> <span class="n">TECHNICAL_500_TEXT_TEMPLATE</span> <span class="o">=</span> <span class="s">"""{</span><span class="si">% lo</span><span class="s">ad firstof from future %}{</span><span class="si">% f</span><span class="s">irstof exception_type 'Report' %}{</span><span class="si">% i</span><span class="s">f request %} at {{ request.path_info }}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% f</span><span class="s">irstof exception_value 'No exception message supplied' %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f request %}</span> <span class="s">Request Method: {{ request.META.REQUEST_METHOD }}</span> <span class="s">Request URL: {{ request.build_absolute_uri }}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">Django Version: {{ django_version_info }}</span> <span class="s">Python Executable: {{ sys_executable }}</span> <span class="s">Python Version: {{ sys_version_info }}</span> <span class="s">Python Path: {{ sys_path }}</span> <span class="s">Server time: {{server_time|date:"r"}}</span> <span class="s">Installed Applications:</span> <span class="s">{{ settings.INSTALLED_APPS|pprint }}</span> <span class="s">Installed Middleware:</span> <span class="s">{{ settings.MIDDLEWARE_CLASSES|pprint }}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f template_does_not_exist %}Template loader Error:</span> <span class="s">{</span><span class="si">% i</span><span class="s">f loader_debug_info %}Django tried loading these templates, in this order:</span> <span class="s">{</span><span class="si">% f</span><span class="s">or loader in loader_debug_info %}Using loader {{ loader.loader }}:</span> <span class="s">{</span><span class="si">% f</span><span class="s">or t in loader.templates %}{{ t.name }} ({{ t.status }})</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndfor %}{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">lse %}Django couldn't find any templates because your TEMPLATE_LOADERS setting is empty!</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% i</span><span class="s">f template_info %}</span> <span class="s">Template error:</span> <span class="s">In template {{ template_info.name }}, error at line {{ template_info.line }}</span> <span class="s"> {{ template_info.message }}{</span><span class="si">% f</span><span class="s">or source_line in template_info.source_lines %}{</span><span class="si">% i</span><span class="s">fequal source_line.0 template_info.line %}</span> <span class="s"> {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}</span> <span class="s">{</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> {{ source_line.0 }} : {{ source_line.1 }}</span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndifequal %}{</span><span class="si">% e</span><span class="s">ndfor %}{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% i</span><span class="s">f frames %}</span> <span class="s">Traceback:</span> <span class="s">{</span><span class="si">% f</span><span class="s">or frame in frames %}File "{{ frame.filename }}" in {{ frame.function }}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f frame.context_line %} {{ frame.lineno }}. {{ frame.context_line }}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f exception_type %}Exception Type: {{ exception_type }}{</span><span class="si">% i</span><span class="s">f request %} at {{ request.path_info }}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f exception_value %}Exception Value: {{ exception_value }}{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% e</span><span class="s">ndif %}{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">{</span><span class="si">% i</span><span class="s">f request %}Request information:</span> <span class="s">GET:{</span><span class="si">% f</span><span class="s">or k, v in request.GET.items %}</span> <span class="s">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s">mpty %} No GET data{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">POST:{</span><span class="si">% f</span><span class="s">or k, v in filtered_POST.items %}</span> <span class="s">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s">mpty %} No POST data{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">FILES:{</span><span class="si">% f</span><span class="s">or k, v in request.FILES.items %}</span> <span class="s">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s">mpty %} No FILES data{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">COOKIES:{</span><span class="si">% f</span><span class="s">or k, v in request.COOKIES.items %}</span> <span class="s">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s">mpty %} No cookie data{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">META:{</span><span class="si">% f</span><span class="s">or k, v in request.META.items|dictsort:"0" %}</span> <span class="s">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">{</span><span class="si">% e</span><span class="s">lse %}Request data not supplied</span> <span class="s">{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s">Settings:</span> <span class="s">Using settings module {{ settings.SETTINGS_MODULE }}{</span><span class="si">% f</span><span class="s">or k, v in settings.items|dictsort:"0" %}</span> <span class="s">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s">You're seeing this error because you have DEBUG = True in your</span> <span class="s">Django settings file. Change that to False, and Django will</span> <span class="s">display a standard 500 page.</span> <span class="s">"""</span> <span class="n">TECHNICAL_404_TEMPLATE</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"><!DOCTYPE html></span> <span class="s"><html lang="en"></span> <span class="s"><head></span> <span class="s"> <meta http-equiv="content-type" content="text/html; charset=utf-8"></span> <span class="s"> <title>Page not found at {{ request.path_info|escape }}</title></span> <span class="s"> <meta name="robots" content="NONE,NOARCHIVE"></span> <span class="s"> <style type="text/css"></span> <span class="s"> html * { padding:0; margin:0; }</span> <span class="s"> body * { padding:10px 20px; }</span> <span class="s"> body * * { padding:0; }</span> <span class="s"> body { font:small sans-serif; background:#eee; }</span> <span class="s"> body>div { border-bottom:1px solid #ddd; }</span> <span class="s"> h1 { font-weight:normal; margin-bottom:.4em; }</span> <span class="s"> h1 span { font-size:60%; color:#666; font-weight:normal; }</span> <span class="s"> table { border:none; border-collapse: collapse; width:100%; }</span> <span class="s"> td, th { vertical-align:top; padding:2px 3px; }</span> <span class="s"> th { width:12em; text-align:right; color:#666; padding-right:.5em; }</span> <span class="s"> #info { background:#f6f6f6; }</span> <span class="s"> #info ol { margin: 0.5em 4em; }</span> <span class="s"> #info ol li { font-family: monospace; }</span> <span class="s"> #summary { background: #ffc; }</span> <span class="s"> #explanation { background:#eee; border-bottom: 0px none; }</span> <span class="s"> </style></span> <span class="s"></head></span> <span class="s"><body></span> <span class="s"> <div id="summary"></span> <span class="s"> <h1>Page not found <span>(404)</span></h1></span> <span class="s"> <table class="meta"></span> <span class="s"> <tr></span> <span class="s"> <th>Request Method:</th></span> <span class="s"> <td>{{ request.META.REQUEST_METHOD }}</td></span> <span class="s"> </tr></span> <span class="s"> <tr></span> <span class="s"> <th>Request URL:</th></span> <span class="s"> <td>{{ request.build_absolute_uri|escape }}</td></span> <span class="s"> </tr></span> <span class="s"> </table></span> <span class="s"> </div></span> <span class="s"> <div id="info"></span> <span class="s"> {</span><span class="si">% i</span><span class="s">f urlpatterns %}</span> <span class="s"> <p></span> <span class="s"> Using the URLconf defined in <code>{{ urlconf }}</code>,</span> <span class="s"> Django tried these URL patterns, in this order:</span> <span class="s"> </p></span> <span class="s"> <ol></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or pattern in urlpatterns %}</span> <span class="s"> <li></span> <span class="s"> {</span><span class="si">% f</span><span class="s">or pat in pattern %}</span> <span class="s"> {{ pat.regex.pattern }}</span> <span class="s"> {</span><span class="si">% i</span><span class="s">f forloop.last and pat.name %}[name='{{ pat.name }}']{</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </li></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndfor %}</span> <span class="s"> </ol></span> <span class="s"> <p>The current URL, <code>{{ request_path|escape }}</code>, didn't match any of these.</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">lse %}</span> <span class="s"> <p>{{ reason }}</p></span> <span class="s"> {</span><span class="si">% e</span><span class="s">ndif %}</span> <span class="s"> </div></span> <span class="s"> <div id="explanation"></span> <span class="s"> <p></span> <span class="s"> You're seeing this error because you have <code>DEBUG = True</code> in</span> <span class="s"> your Django settings file. Change that to <code>False</code>, and Django</span> <span class="s"> will display a standard 404 page.</span> <span class="s"> </p></span> <span class="s"> </div></span> <span class="s"></body></span> <span class="s"></html></span> <span class="s">"""</span> <span class="n">DEFAULT_URLCONF_TEMPLATE</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"><!DOCTYPE html></span> <span class="s"><html lang="en"><head></span> <span class="s"> <meta http-equiv="content-type" content="text/html; charset=utf-8"></span> <span class="s"> <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title></span> <span class="s"> <style type="text/css"></span> <span class="s"> html * { padding:0; margin:0; }</span> <span class="s"> body * { padding:10px 20px; }</span> <span class="s"> body * * { padding:0; }</span> <span class="s"> body { font:small sans-serif; }</span> <span class="s"> body>div { border-bottom:1px solid #ddd; }</span> <span class="s"> h1 { font-weight:normal; }</span> <span class="s"> h2 { margin-bottom:.8em; }</span> <span class="s"> h2 span { font-size:80%; color:#666; font-weight:normal; }</span> <span class="s"> h3 { margin:1em 0 .5em 0; }</span> <span class="s"> h4 { margin:0 0 .5em 0; font-weight: normal; }</span> <span class="s"> table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }</span> <span class="s"> tbody td, tbody th { vertical-align:top; padding:2px 3px; }</span> <span class="s"> thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }</span> <span class="s"> tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }</span> <span class="s"> #summary { background: #e0ebff; }</span> <span class="s"> #summary h2 { font-weight: normal; color: #666; }</span> <span class="s"> #explanation { background:#eee; }</span> <span class="s"> #instructions { background:#f6f6f6; }</span> <span class="s"> #summary table { border:none; background:transparent; }</span> <span class="s"> </style></span> <span class="s"></head></span> <span class="s"><body></span> <span class="s"><div id="summary"></span> <span class="s"> <h1>It worked!</h1></span> <span class="s"> <h2>Congratulations on your first Django-powered page.</h2></span> <span class="s"></div></span> <span class="s"><div id="instructions"></span> <span class="s"> <p></span> <span class="s"> Of course, you haven't actually done any work yet.</span> <span class="s"> Next, start your first app by running <code>python manage.py startapp [appname]</code>.</span> <span class="s"> </p></span> <span class="s"></div></span> <span class="s"><div id="explanation"></span> <span class="s"> <p></span> <span class="s"> You're seeing this message because you have <code>DEBUG = True</code> in your</span> <span class="s"> Django settings file and you haven't configured any URLs. Get to work!</span> <span class="s"> </p></span> <span class="s"></div></span> <span class="s"></body></html></span> <span class="s">"""</span> </pre></div> </div> </div> </div> <div class="yui-b" id="sidebar"> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3>Browse</h3> <ul> </ul> <h3>You are here:</h3> <ul> <li> <a href="../../../index.html">Django 1.6.7 documentation</a> <ul><li><a href="../../index.html">Module code</a> <ul><li><a href="../views.html">django.views</a> <ul><li>django.views.debug</li></ul> </li></ul></li></ul> </li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../../../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <h3>Last update:</h3> <p class="topless">Sep 26, 2014</p> </div> </div> <div id="ft"> <div class="nav"> <a href="../../index.html" title="Module code" accesskey="U">up</a></div> </div> </div> <div class="clearer"></div> </div> </body> </html>