<!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" lang=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>django.views.debug — Django 1.8.19 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.8.19', 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="index" title="Index" href="../../../genindex.html" /> <link rel="search" title="Search" href="../../../search.html" /> <link rel="top" title="Django 1.8.19 documentation" href="../../../contents.html" /> <link rel="up" title="django" href="../../django.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 role="document"> <div class="document"> <div id="custom-doc" class="yui-t6"> <div id="hd"> <h1><a href="../../../index.html">Django 1.8.19 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></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">unicode_literals</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="k">import</span> <span class="n">settings</span> <span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">Resolver404</span><span class="p">,</span> <span class="n">resolve</span> <span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="p">(</span> <span class="n">HttpRequest</span><span class="p">,</span> <span class="n">HttpResponse</span><span class="p">,</span> <span class="n">HttpResponseNotFound</span><span class="p">,</span> <span class="n">build_request_repr</span><span class="p">,</span> <span class="p">)</span> <span class="kn">from</span> <span class="nn">django.template</span> <span class="k">import</span> <span class="n">Context</span><span class="p">,</span> <span class="n">Engine</span><span class="p">,</span> <span class="n">TemplateDoesNotExist</span> <span class="kn">from</span> <span class="nn">django.template.defaultfilters</span> <span class="k">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</span> <span class="k">import</span> <span class="n">lru_cache</span><span class="p">,</span> <span class="n">six</span><span class="p">,</span> <span class="n">timezone</span> <span class="kn">from</span> <span class="nn">django.utils.datastructures</span> <span class="k">import</span> <span class="n">MultiValueDict</span> <span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="k">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.html</span> <span class="k">import</span> <span class="n">escape</span> <span class="kn">from</span> <span class="nn">django.utils.module_loading</span> <span class="k">import</span> <span class="n">import_string</span> <span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="k">import</span> <span class="n">ugettext</span> <span class="k">as</span> <span class="n">_</span> <span class="c1"># Minimal Django templates engine to render the error templates</span> <span class="c1"># regardless of the project's TEMPLATES setting.</span> <span class="n">DEBUG_ENGINE</span> <span class="o">=</span> <span class="n">Engine</span><span class="p">(</span><span class="n">debug</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="s1">'API|TOKEN|KEY|SECRET|PASS|SIGNATURE'</span><span class="p">)</span> <span class="n">CLEANSED_SUBSTITUTE</span> <span class="o">=</span> <span class="s1">'********************'</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="s1">'</span><span class="se">\n</span><span class="s1">'</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="s1">'</span><span class="se">\n</span><span class="s1">'</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">class</span> <span class="nc">CallableSettingWrapper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">""" Object to wrap callable appearing in settings</span> <span class="sd"> * Not to call in the debug page (#21345).</span> <span class="sd"> * Not to break the debug page if the callable forbidding to set attributes (#23070).</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">callable_setting</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="o">=</span> <span class="n">callable_setting</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">)</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="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="c1"># 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">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">cleansed</span><span class="p">):</span> <span class="c1"># For fixing #21345 and #23070</span> <span class="n">cleansed</span> <span class="o">=</span> <span class="n">CallableSettingWrapper</span><span class="p">(</span><span class="n">cleansed</span><span class="p">)</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="s2">"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="n">status_code</span><span class="o">=</span><span class="mi">500</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">HttpResponse</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status_code</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="s1">'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">HttpResponse</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status_code</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="s1">'text/html'</span><span class="p">)</span> <span class="nd">@lru_cache</span><span class="o">.</span><span class="n">lru_cache</span><span class="p">()</span> <span class="k">def</span> <span class="nf">get_default_exception_reporter_filter</span><span class="p">():</span> <span class="c1"># Instantiate the default filter for the first time and cache it.</span> <span class="k">return</span> <span class="n">import_string</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">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="n">default_filter</span> <span class="o">=</span> <span class="n">get_default_exception_reporter_filter</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="s1">'exception_reporter_filter'</span><span class="p">,</span> <span class="n">default_filter</span><span class="p">)</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="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="kc">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="kc">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="kc">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="s1">'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="kc">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="s1">'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="s1">'__ALL__'</span><span class="p">:</span> <span class="c1"># 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="c1"># 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="c1"># 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="c1"># 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="c1"># Loop through the frame's callers to see if the sensitive_variables</span> <span class="c1"># 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="kc">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="kc">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="s1">'sensitive_variables_wrapper'</span> <span class="ow">and</span> <span class="s1">'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="c1"># The sensitive_variables decorator was used, so we take note</span> <span class="c1"># 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="s1">'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="s1">'sensitive_variables'</span><span class="p">,</span> <span class="kc">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="s1">'__ALL__'</span><span class="p">:</span> <span class="c1"># 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="c1"># 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="c1"># Potentially cleanse the request and any MultiValueDicts if they</span> <span class="c1"># 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="s1">'sensitive_variables_wrapper'</span> <span class="ow">and</span> <span class="s1">'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="c1"># For good measure, obfuscate the decorated function's arguments in</span> <span class="c1"># the sensitive_variables decorator's frame, in case the variables</span> <span class="c1"># associated with those arguments were meant to be obfuscated from</span> <span class="c1"># the decorated function's frame.</span> <span class="n">cleansed</span><span class="p">[</span><span class="s1">'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="s1">'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="kc">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="kc">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="kc">False</span> <span class="bp">self</span><span class="o">.</span><span class="n">loader_debug_info</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># 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="s1">'Deprecated String Exception: </span><span class="si">%r</span><span class="s1">'</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="s2">"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="s2">"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="s2">"File is not readable"</span> <span class="k">return</span> <span class="s2">"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="sd">"""Return a dictionary containing traceback information."""</span> <span class="k">try</span><span class="p">:</span> <span class="n">default_template_engine</span> <span class="o">=</span> <span class="n">Engine</span><span class="o">.</span><span class="n">get_default</span><span class="p">()</span> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span> <span class="c1"># Since the debug view must never crash, catch all exceptions.</span> <span class="c1"># If Django can't find a default template engine, get_default()</span> <span class="c1"># raises ImproperlyConfigured. If some template engines fail to</span> <span class="c1"># load, any exception may be raised.</span> <span class="n">default_template_engine</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># TODO: add support for multiple template engines (#24120).</span> <span class="c1"># TemplateDoesNotExist should carry all the information.</span> <span class="c1"># Replaying the search process isn't a good design.</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="k">if</span> <span class="n">default_template_engine</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">template_loaders</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_does_not_exist</span> <span class="o">=</span> <span class="kc">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="c1"># If Django fails in get_template_loaders, provide an empty list</span> <span class="c1"># for the following loop to not fail.</span> <span class="k">try</span><span class="p">:</span> <span class="n">template_loaders</span> <span class="o">=</span> <span class="n">default_template_engine</span><span class="o">.</span><span class="n">template_loaders</span> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span> <span class="n">template_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_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="c1"># NOTE: This assumes exc_value is the name of the template that</span> <span class="c1"># the loader attempted to load.</span> <span class="n">template_list</span> <span class="o">=</span> <span class="p">[{</span> <span class="s1">'name'</span><span class="p">:</span> <span class="n">t</span><span class="p">,</span> <span class="s1">'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="s1">'.'</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="s1">'loader'</span><span class="p">:</span> <span class="n">loader_name</span><span class="p">,</span> <span class="s1">'templates'</span><span class="p">:</span> <span class="n">template_list</span><span class="p">,</span> <span class="p">})</span> <span class="c1"># TODO: add support for multiple template engines (#24119).</span> <span class="k">if</span> <span class="p">(</span><span class="n">default_template_engine</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">default_template_engine</span><span class="o">.</span><span class="n">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="s1">'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="s1">'vars'</span> <span class="ow">in</span> <span class="n">frame</span><span class="p">:</span> <span class="n">frame_vars</span> <span class="o">=</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="s1">'vars'</span><span class="p">]:</span> <span class="n">v</span> <span class="o">=</span> <span class="n">pprint</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="c1"># The force_escape filter assume unicode, make sure that works</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</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">v</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">,</span> <span class="s1">'replace'</span><span class="p">)</span> <span class="c1"># don't choke on non-utf-8 input</span> <span class="c1"># Trim large blobs of data</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">></span> <span class="mi">4096</span><span class="p">:</span> <span class="n">v</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">... <trimmed </span><span class="si">%d</span><span class="s1"> bytes string>'</span> <span class="o">%</span> <span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4096</span><span class="p">],</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">))</span> <span class="n">frame_vars</span><span class="o">.</span><span class="n">append</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">v</span><span class="p">)))</span> <span class="n">frame</span><span class="p">[</span><span class="s1">'vars'</span><span class="p">]</span> <span class="o">=</span> <span class="n">frame_vars</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="s1">''</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="s1">'start'</span><span class="p">,</span> <span class="kc">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="s1">'end'</span><span class="p">,</span> <span class="kc">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="kc">None</span> <span class="ow">and</span> <span class="n">end</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">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="s1">'ascii'</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s1">'replace'</span> <span class="p">)</span> <span class="kn">from</span> <span class="nn">django</span> <span class="k">import</span> <span class="n">get_version</span> <span class="n">c</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'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="s1">'unicode_hint'</span><span class="p">:</span> <span class="n">unicode_hint</span><span class="p">,</span> <span class="s1">'frames'</span><span class="p">:</span> <span class="n">frames</span><span class="p">,</span> <span class="s1">'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="s1">'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="s1">'settings'</span><span class="p">:</span> <span class="n">get_safe_settings</span><span class="p">(),</span> <span class="s1">'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="s1">'sys_version_info'</span><span class="p">:</span> <span class="s1">'</span><span class="si">%d</span><span class="s1">.</span><span class="si">%d</span><span class="s1">.</span><span class="si">%d</span><span class="s1">'</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="s1">'server_time'</span><span class="p">:</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="s1">'django_version_info'</span><span class="p">:</span> <span class="n">get_version</span><span class="p">(),</span> <span class="s1">'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="s1">'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="s1">'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="s1">'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="c1"># 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="s1">'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="s1">'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="s1">'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="s1">'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="s2">"Return HTML version of debug 500 HTTP error page."</span> <span class="n">t</span> <span class="o">=</span> <span class="n">DEBUG_ENGINE</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">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">use_l10n</span><span class="o">=</span><span class="kc">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_traceback_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="s2">"Return plain text version of debug 500 HTTP error page."</span> <span class="n">t</span> <span class="o">=</span> <span class="n">DEBUG_ENGINE</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">TECHNICAL_500_TEXT_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="kc">False</span><span class="p">,</span> <span class="n">use_l10n</span><span class="o">=</span><span class="kc">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="s2">""</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="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="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="c1"># 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="s1">'(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="s1">'message'</span><span class="p">:</span> <span class="n">message</span><span class="p">,</span> <span class="s1">'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="s1">'before'</span><span class="p">:</span> <span class="n">before</span><span class="p">,</span> <span class="s1">'during'</span><span class="p">:</span> <span class="n">during</span><span class="p">,</span> <span class="s1">'after'</span><span class="p">:</span> <span class="n">after</span><span class="p">,</span> <span class="s1">'top'</span><span class="p">:</span> <span class="n">top</span><span class="p">,</span> <span class="s1">'bottom'</span><span class="p">:</span> <span class="n">bottom</span><span class="p">,</span> <span class="s1">'total'</span><span class="p">:</span> <span class="n">total</span><span class="p">,</span> <span class="s1">'line'</span><span class="p">:</span> <span class="n">line</span><span class="p">,</span> <span class="s1">'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="kc">None</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="kc">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="kc">None</span> <span class="k">if</span> <span class="n">loader</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">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="s2">"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="kc">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="kc">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="s1">'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="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[],</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[]</span> <span class="c1"># If we just read the source from a file, or if the loader did not</span> <span class="c1"># apply tokenize.detect_encoding to decode the source into a Unicode</span> <span class="c1"># 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="s1">'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="c1"># File coding may be specified. Match pattern from PEP-263</span> <span class="c1"># (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="s1">'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="s1">'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="s1">'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="kc">None</span><span class="p">:</span> <span class="c1"># Support for __traceback_hide__ which is used by a few libraries</span> <span class="c1"># 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="s1">'__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="s1">'__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="s1">'__name__'</span><span class="p">)</span> <span class="ow">or</span> <span class="s1">''</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="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="kc">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="s1">'tb'</span><span class="p">:</span> <span class="n">tb</span><span class="p">,</span> <span class="s1">'type'</span><span class="p">:</span> <span class="s1">'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="s1">'django.'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'user'</span><span class="p">,</span> <span class="s1">'filename'</span><span class="p">:</span> <span class="n">filename</span><span class="p">,</span> <span class="s1">'function'</span><span class="p">:</span> <span class="n">function</span><span class="p">,</span> <span class="s1">'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="s1">'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="s1">'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="s1">'pre_context'</span><span class="p">:</span> <span class="n">pre_context</span><span class="p">,</span> <span class="s1">'context_line'</span><span class="p">:</span> <span class="n">context_line</span><span class="p">,</span> <span class="s1">'post_context'</span><span class="p">:</span> <span class="n">post_context</span><span class="p">,</span> <span class="s1">'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="n">f</span><span class="p">[</span><span class="s1">'filename'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s1">'lineno'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s1">'function'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s1">'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="s1">'Traceback (most recent call last):</span><span class="se">\n</span><span class="s1">'</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="s2">"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">error_url</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="s1">'path'</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">error_url</span> <span class="o">=</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="c1"># Trim leading slash</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="s1">'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="c1"># 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="s1">'/'</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="c1"># 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="s1">'app_name'</span><span class="p">,</span> <span class="s1">''</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="s1">'namespace'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'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="s1">'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">caller</span> <span class="o">=</span> <span class="s1">''</span> <span class="k">try</span><span class="p">:</span> <span class="n">resolver_match</span> <span class="o">=</span> <span class="n">resolve</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> <span class="k">except</span> <span class="n">Resolver404</span><span class="p">:</span> <span class="k">pass</span> <span class="k">else</span><span class="p">:</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">resolver_match</span><span class="o">.</span><span class="n">func</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s1">'__name__'</span><span class="p">):</span> <span class="n">caller</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">__name__</span> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s1">'__class__'</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="s1">'__name__'</span><span class="p">):</span> <span class="n">caller</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s1">'__module__'</span><span class="p">):</span> <span class="n">module</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">__module__</span> <span class="n">caller</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span> <span class="n">t</span> <span class="o">=</span> <span class="n">DEBUG_ENGINE</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">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="s1">'urlconf'</span><span class="p">:</span> <span class="n">urlconf</span><span class="p">,</span> <span class="s1">'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="s1">'request_path'</span><span class="p">:</span> <span class="n">error_url</span><span class="p">,</span> <span class="s1">'urlpatterns'</span><span class="p">:</span> <span class="n">tried</span><span class="p">,</span> <span class="s1">'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="s1">'replace'</span><span class="p">),</span> <span class="s1">'request'</span><span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="s1">'settings'</span><span class="p">:</span> <span class="n">get_safe_settings</span><span class="p">(),</span> <span class="s1">'raising_view_name'</span><span class="p">:</span> <span class="n">caller</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="s1">'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="s2">"Create an empty URLconf 404 error response."</span> <span class="n">t</span> <span class="o">=</span> <span class="n">DEBUG_ENGINE</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">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="s2">"title"</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Welcome to Django"</span><span class="p">),</span> <span class="s2">"heading"</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"It worked!"</span><span class="p">),</span> <span class="s2">"subheading"</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Congratulations on your first Django-powered page."</span><span class="p">),</span> <span class="s2">"instructions"</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Of course, you haven't actually done any work yet. "</span> <span class="s2">"Next, start your first app by running <code>python manage.py startapp [app_label]</code>."</span><span class="p">),</span> <span class="s2">"explanation"</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"You're seeing this message because you have <code>DEBUG = True</code> in your "</span> <span class="s2">"Django settings file and you haven't configured any URLs. Get to work!"</span><span class="p">),</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="s1">'text/html'</span><span class="p">)</span> <span class="c1">#</span> <span class="c1"># Templates are embedded in the file so that we know the error handler will</span> <span class="c1"># always work even if the template loader is broken.</span> <span class="c1">#</span> <span class="n">TECHNICAL_500_TEMPLATE</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"""</span> <span class="s2"><!DOCTYPE html></span> <span class="s2"><html lang="en"></span> <span class="s2"><head></span> <span class="s2"> <meta http-equiv="content-type" content="text/html; charset=utf-8"></span> <span class="s2"> <meta name="robots" content="NONE,NOARCHIVE"></span> <span class="s2"> <title>{</span><span class="si">% i</span><span class="s2">f exception_type %}{{ exception_type }}{</span><span class="si">% e</span><span class="s2">lse %}Report{</span><span class="si">% e</span><span class="s2">ndif %}"""</span> <span class="sd">"""{% if request %} at {{ request.path_info|escape }}{% endif %}</title></span> <span class="sd"> <style type="text/css"></span> <span class="sd"> html * { padding:0; margin:0; }</span> <span class="sd"> body * { padding:10px 20px; }</span> <span class="sd"> body * * { padding:0; }</span> <span class="sd"> body { font:small sans-serif; }</span> <span class="sd"> body>div { border-bottom:1px solid #ddd; }</span> <span class="sd"> h1 { font-weight:normal; }</span> <span class="sd"> h2 { margin-bottom:.8em; }</span> <span class="sd"> h2 span { font-size:80%; color:#666; font-weight:normal; }</span> <span class="sd"> h3 { margin:1em 0 .5em 0; }</span> <span class="sd"> h4 { margin:0 0 .5em 0; font-weight: normal; }</span> <span class="sd"> code, pre { font-size: 100%; white-space: pre-wrap; }</span> <span class="sd"> table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }</span> <span class="sd"> tbody td, tbody th { vertical-align:top; padding:2px 3px; }</span> <span class="sd"> thead th {</span> <span class="sd"> padding:1px 6px 1px 3px; background:#fefefe; text-align:left;</span> <span class="sd"> font-weight:normal; font-size:11px; border:1px solid #ddd;</span> <span class="sd"> }</span> <span class="sd"> tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }</span> <span class="sd"> table.vars { margin:5px 0 2px 40px; }</span> <span class="sd"> table.vars td, table.req td { font-family:monospace; }</span> <span class="sd"> table td.code { width:100%; }</span> <span class="sd"> table td.code pre { overflow:hidden; }</span> <span class="sd"> table.source th { color:#666; }</span> <span class="sd"> table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }</span> <span class="sd"> ul.traceback { list-style-type:none; color: #222; }</span> <span class="sd"> ul.traceback li.frame { padding-bottom:1em; color:#666; }</span> <span class="sd"> ul.traceback li.user { background-color:#e0e0e0; color:#000 }</span> <span class="sd"> div.context { padding:10px 0; overflow:hidden; }</span> <span class="sd"> div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }</span> <span class="sd"> div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; }</span> <span class="sd"> div.context ol li pre { display:inline; }</span> <span class="sd"> div.context ol.context-line li { color:#505050; background-color:#dfdfdf; }</span> <span class="sd"> div.context ol.context-line li span { position:absolute; right:32px; }</span> <span class="sd"> .user div.context ol.context-line li { background-color:#bbb; color:#000; }</span> <span class="sd"> .user div.context ol li { color:#666; }</span> <span class="sd"> div.commands { margin-left: 40px; }</span> <span class="sd"> div.commands a { color:#555; text-decoration:none; }</span> <span class="sd"> .user div.commands a { color: black; }</span> <span class="sd"> #summary { background: #ffc; }</span> <span class="sd"> #summary h2 { font-weight: normal; color: #666; }</span> <span class="sd"> #explanation { background:#eee; }</span> <span class="sd"> #template, #template-not-exist { background:#f6f6f6; }</span> <span class="sd"> #template-not-exist ul { margin: 0 0 0 20px; }</span> <span class="sd"> #unicode-hint { background:#eee; }</span> <span class="sd"> #traceback { background:#eee; }</span> <span class="sd"> #requestinfo { background:#f6f6f6; padding-left:120px; }</span> <span class="sd"> #summary table { border:none; background:transparent; }</span> <span class="sd"> #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }</span> <span class="sd"> #requestinfo h3 { margin-bottom:-1em; }</span> <span class="sd"> .error { background: #ffc; }</span> <span class="sd"> .specific { color:#cc3300; font-weight:bold; }</span> <span class="sd"> h2 span.commands { font-size:.7em;}</span> <span class="sd"> span.commands a:link {color:#5E5694;}</span> <span class="sd"> pre.exception_value { font-family: sans-serif; color: #666; font-size: 1.5em; margin: 10px 0 10px 0; }</span> <span class="sd"> </style></span> <span class="sd"> {% if not is_email %}</span> <span class="sd"> <script type="text/javascript"></span> <span class="sd"> //<!--</span> <span class="sd"> function getElementsByClassName(oElm, strTagName, strClassName){</span> <span class="sd"> // Written by Jonathan Snook, http://www.snook.ca/jon; Add-ons by Robert Nyman, http://www.robertnyman.com</span> <span class="sd"> var arrElements = (strTagName == "*" && document.all)? document.all :</span> <span class="sd"> oElm.getElementsByTagName(strTagName);</span> <span class="sd"> var arrReturnElements = new Array();</span> <span class="sd"> strClassName = strClassName.replace(/\-/g, "\\-");</span> <span class="sd"> var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");</span> <span class="sd"> var oElement;</span> <span class="sd"> for(var i=0; i<arrElements.length; i++){</span> <span class="sd"> oElement = arrElements[i];</span> <span class="sd"> if(oRegExp.test(oElement.className)){</span> <span class="sd"> arrReturnElements.push(oElement);</span> <span class="sd"> }</span> <span class="sd"> }</span> <span class="sd"> return (arrReturnElements)</span> <span class="sd"> }</span> <span class="sd"> function hideAll(elems) {</span> <span class="sd"> for (var e = 0; e < elems.length; e++) {</span> <span class="sd"> elems[e].style.display = 'none';</span> <span class="sd"> }</span> <span class="sd"> }</span> <span class="sd"> window.onload = function() {</span> <span class="sd"> hideAll(getElementsByClassName(document, 'table', 'vars'));</span> <span class="sd"> hideAll(getElementsByClassName(document, 'ol', 'pre-context'));</span> <span class="sd"> hideAll(getElementsByClassName(document, 'ol', 'post-context'));</span> <span class="sd"> hideAll(getElementsByClassName(document, 'div', 'pastebin'));</span> <span class="sd"> }</span> <span class="sd"> function toggle() {</span> <span class="sd"> for (var i = 0; i < arguments.length; i++) {</span> <span class="sd"> var e = document.getElementById(arguments[i]);</span> <span class="sd"> if (e) {</span> <span class="sd"> e.style.display = e.style.display == 'none' ? 'block': 'none';</span> <span class="sd"> }</span> <span class="sd"> }</span> <span class="sd"> return false;</span> <span class="sd"> }</span> <span class="sd"> function varToggle(link, id) {</span> <span class="sd"> toggle('v' + id);</span> <span class="sd"> var s = link.getElementsByTagName('span')[0];</span> <span class="sd"> var uarr = String.fromCharCode(0x25b6);</span> <span class="sd"> var darr = String.fromCharCode(0x25bc);</span> <span class="sd"> s.textContent = s.textContent == uarr ? darr : uarr;</span> <span class="sd"> return false;</span> <span class="sd"> }</span> <span class="sd"> function switchPastebinFriendly(link) {</span> <span class="sd"> s1 = "Switch to copy-and-paste view";</span> <span class="sd"> s2 = "Switch back to interactive view";</span> <span class="sd"> link.textContent = link.textContent.trim() == s1 ? s2: s1;</span> <span class="sd"> toggle('browserTraceback', 'pastebinTraceback');</span> <span class="sd"> return false;</span> <span class="sd"> }</span> <span class="sd"> //--></span> <span class="sd"> </script></span> <span class="sd"> {% endif %}</span> <span class="sd"></head></span> <span class="sd"><body></span> <span class="sd"><div id="summary"></span> <span class="sd"> <h1>{% if exception_type %}{{ exception_type }}{% else %}Report{% endif %}"""</span> <span class="sd">"""{% if request %} at {{ request.path_info|escape }}{% endif %}</h1></span> <span class="sd"> <pre class="exception_value">"""</span> <span class="sd">"""{% if exception_value %}{{ exception_value|force_escape }}{% else %}No exception message supplied{% endif %}"""</span> <span class="sd">"""</pre></span> <span class="sd"> <table class="meta"></span> <span class="sd">{% if request %}</span> <span class="sd"> <tr></span> <span class="sd"> <th>Request Method:</th></span> <span class="sd"> <td>{{ request.META.REQUEST_METHOD }}</td></span> <span class="sd"> </tr></span> <span class="sd"> <tr></span> <span class="sd"> <th>Request URL:</th></span> <span class="sd"> <td>{{ request.build_absolute_uri|escape }}</td></span> <span class="sd"> </tr></span> <span class="sd">{% endif %}</span> <span class="sd"> <tr></span> <span class="sd"> <th>Django Version:</th></span> <span class="sd"> <td>{{ django_version_info }}</td></span> <span class="sd"> </tr></span> <span class="sd">{% if exception_type %}</span> <span class="sd"> <tr></span> <span class="sd"> <th>Exception Type:</th></span> <span class="sd"> <td>{{ exception_type }}</td></span> <span class="sd"> </tr></span> <span class="sd">{% endif %}</span> <span class="sd">{% if exception_type and exception_value %}</span> <span class="sd"> <tr></span> <span class="sd"> <th>Exception Value:</th></span> <span class="sd"> <td><pre>{{ exception_value|force_escape }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd">{% endif %}</span> <span class="sd">{% if lastframe %}</span> <span class="sd"> <tr></span> <span class="sd"> <th>Exception Location:</th></span> <span class="sd"> <td>{{ lastframe.filename|escape }} in {{ lastframe.function|escape }}, line {{ lastframe.lineno }}</td></span> <span class="sd"> </tr></span> <span class="sd">{% endif %}</span> <span class="sd"> <tr></span> <span class="sd"> <th>Python Executable:</th></span> <span class="sd"> <td>{{ sys_executable|escape }}</td></span> <span class="sd"> </tr></span> <span class="sd"> <tr></span> <span class="sd"> <th>Python Version:</th></span> <span class="sd"> <td>{{ sys_version_info }}</td></span> <span class="sd"> </tr></span> <span class="sd"> <tr></span> <span class="sd"> <th>Python Path:</th></span> <span class="sd"> <td><pre>{{ sys_path|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> <tr></span> <span class="sd"> <th>Server time:</th></span> <span class="sd"> <td>{{server_time|date:"r"}}</td></span> <span class="sd"> </tr></span> <span class="sd"> </table></span> <span class="sd"></div></span> <span class="sd">{% if unicode_hint %}</span> <span class="sd"><div id="unicode-hint"></span> <span class="sd"> <h2>Unicode error hint</h2></span> <span class="sd"> <p>The string that could not be encoded/decoded was: <strong>{{ unicode_hint|force_escape }}</strong></p></span> <span class="sd"></div></span> <span class="sd">{% endif %}</span> <span class="sd">{% if template_does_not_exist %}</span> <span class="sd"><div id="template-not-exist"></span> <span class="sd"> <h2>Template-loader postmortem</h2></span> <span class="sd"> {% if loader_debug_info %}</span> <span class="sd"> <p>Django tried loading these templates, in this order:</p></span> <span class="sd"> <ul></span> <span class="sd"> {% for loader in loader_debug_info %}</span> <span class="sd"> <li>Using loader <code>{{ loader.loader }}</code>:</span> <span class="sd"> <ul></span> <span class="sd"> {% for t in loader.templates %}<li><code>{{ t.name }}</code> ({{ t.status }})</li>{% endfor %}</span> <span class="sd"> </ul></span> <span class="sd"> </li></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </ul></span> <span class="sd"> {% else %}</span> <span class="sd"> <p>Django couldn't find any templates because your <code>'loaders'</code> option is empty!</p></span> <span class="sd"> {% endif %}</span> <span class="sd"></div></span> <span class="sd">{% endif %}</span> <span class="sd">{% if template_info %}</span> <span class="sd"><div id="template"></span> <span class="sd"> <h2>Error during template rendering</h2></span> <span class="sd"> <p>In template <code>{{ template_info.name }}</code>, error at line <strong>{{ template_info.line }}</strong></p></span> <span class="sd"> <h3>{{ template_info.message }}</h3></span> <span class="sd"> <table class="source{% if template_info.top %} cut-top{% endif %}</span> <span class="sd"> {% ifnotequal template_info.bottom template_info.total %} cut-bottom{% endifnotequal %}"></span> <span class="sd"> {% for source_line in template_info.source_lines %}</span> <span class="sd"> {% ifequal source_line.0 template_info.line %}</span> <span class="sd"> <tr class="error"><th>{{ source_line.0 }}</th></span> <span class="sd"> <td></span> <span class="sd"> {{ template_info.before }}</span> <span class="sd"> <span class="specific">{{ template_info.during }}</span></span> <span class="sd"> {{ template_info.after }}</span> <span class="sd"> </td></span> <span class="sd"> </tr></span> <span class="sd"> {% else %}</span> <span class="sd"> <tr><th>{{ source_line.0 }}</th></span> <span class="sd"> <td>{{ source_line.1 }}</td></tr></span> <span class="sd"> {% endifequal %}</span> <span class="sd"> {% endfor %}</span> <span class="sd"> </table></span> <span class="sd"></div></span> <span class="sd">{% endif %}</span> <span class="sd">{% if frames %}</span> <span class="sd"><div id="traceback"></span> <span class="sd"> <h2>Traceback <span class="commands">{% if not is_email %}<a href="#" onclick="return switchPastebinFriendly(this);"></span> <span class="sd"> Switch to copy-and-paste view</a></span>{% endif %}</span> <span class="sd"> </h2></span> <span class="sd"> {% autoescape off %}</span> <span class="sd"> <div id="browserTraceback"></span> <span class="sd"> <ul class="traceback"></span> <span class="sd"> {% for frame in frames %}</span> <span class="sd"> <li class="frame {{ frame.type }}"></span> <span class="sd"> <code>{{ frame.filename|escape }}</code> in <code>{{ frame.function|escape }}</code></span> <span class="sd"> {% if frame.context_line %}</span> <span class="sd"> <div class="context" id="c{{ frame.id }}"></span> <span class="sd"> {% if frame.pre_context and not is_email %}</span> <span class="sd"> <ol start="{{ frame.pre_context_lineno }}" class="pre-context" id="pre{{ frame.id }}"></span> <span class="sd"> {% for line in frame.pre_context %}</span> <span class="sd"> <li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ line|escape }}</pre></li></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </ol></span> <span class="sd"> {% endif %}</span> <span class="sd"> <ol start="{{ frame.lineno }}" class="context-line"></span> <span class="sd"> <li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre></span> <span class="sd"> {{ frame.context_line|escape }}</pre>{% if not is_email %} <span>...</span>{% endif %}</li></ol></span> <span class="sd"> {% if frame.post_context and not is_email %}</span> <span class="sd"> <ol start='{{ frame.lineno|add:"1" }}' class="post-context" id="post{{ frame.id }}"></span> <span class="sd"> {% for line in frame.post_context %}</span> <span class="sd"> <li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ line|escape }}</pre></li></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </ol></span> <span class="sd"> {% endif %}</span> <span class="sd"> </div></span> <span class="sd"> {% endif %}</span> <span class="sd"> {% if frame.vars %}</span> <span class="sd"> <div class="commands"></span> <span class="sd"> {% if is_email %}</span> <span class="sd"> <h2>Local Vars</h2></span> <span class="sd"> {% else %}</span> <span class="sd"> <a href="#" onclick="return varToggle(this, '{{ frame.id }}')"><span>&#x25b6;</span> Local vars</a></span> <span class="sd"> {% endif %}</span> <span class="sd"> </div></span> <span class="sd"> <table class="vars" id="v{{ frame.id }}"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Variable</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in frame.vars|dictsort:"0" %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0|force_escape }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1 }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd"> {% endif %}</span> <span class="sd"> </li></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </ul></span> <span class="sd"> </div></span> <span class="sd"> {% endautoescape %}</span> <span class="sd"> <form action="http://dpaste.com/" name="pasteform" id="pasteform" method="post"></span> <span class="sd">{% if not is_email %}</span> <span class="sd"> <div id="pastebinTraceback" class="pastebin"></span> <span class="sd"> <input type="hidden" name="language" value="PythonConsole"></span> <span class="sd"> <input type="hidden" name="title"</span> <span class="sd"> value="{{ exception_type|escape }}{% if request %} at {{ request.path_info|escape }}{% endif %}"></span> <span class="sd"> <input type="hidden" name="source" value="Django Dpaste Agent"></span> <span class="sd"> <input type="hidden" name="poster" value="Django"></span> <span class="sd"> <textarea name="content" id="traceback_area" cols="140" rows="25"></span> <span class="sd">Environment:</span> <span class="sd">{% if request %}</span> <span class="sd">Request Method: {{ request.META.REQUEST_METHOD }}</span> <span class="sd">Request URL: {{ request.build_absolute_uri|escape }}</span> <span class="sd">{% endif %}</span> <span class="sd">Django Version: {{ django_version_info }}</span> <span class="sd">Python Version: {{ sys_version_info }}</span> <span class="sd">Installed Applications:</span> <span class="sd">{{ settings.INSTALLED_APPS|pprint }}</span> <span class="sd">Installed Middleware:</span> <span class="sd">{{ settings.MIDDLEWARE_CLASSES|pprint }}</span> <span class="sd">{% if template_does_not_exist %}Template Loader Error:</span> <span class="sd">{% if loader_debug_info %}Django tried loading these templates, in this order:</span> <span class="sd">{% for loader in loader_debug_info %}Using loader {{ loader.loader }}:</span> <span class="sd">{% for t in loader.templates %}{{ t.name }} ({{ t.status }})</span> <span class="sd">{% endfor %}{% endfor %}</span> <span class="sd">{% else %}Django couldn't find any templates because your 'loaders' option is empty!</span> <span class="sd">{% endif %}</span> <span class="sd">{% endif %}{% if template_info %}</span> <span class="sd">Template error:</span> <span class="sd">In template {{ template_info.name }}, error at line {{ template_info.line }}</span> <span class="sd"> {{ template_info.message }}{% for source_line in template_info.source_lines %}</span> <span class="sd">{% ifequal source_line.0 template_info.line %}</span> <span class="sd"> {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}</span> <span class="sd">{% else %}</span> <span class="sd"> {{ source_line.0 }} : {{ source_line.1 }}</span> <span class="sd">{% endifequal %}{% endfor %}{% endif %}</span> <span class="sd">Traceback:</span> <span class="sd">{% for frame in frames %}File "{{ frame.filename|escape }}" in {{ frame.function|escape }}</span> <span class="sd">{% if frame.context_line %} {{ frame.lineno }}. {{ frame.context_line|escape }}{% endif %}</span> <span class="sd">{% endfor %}</span> <span class="sd">Exception Type: {{ exception_type|escape }}{% if request %} at {{ request.path_info|escape }}{% endif %}</span> <span class="sd">Exception Value: {{ exception_value|force_escape }}</span> <span class="sd"></textarea></span> <span class="sd"> <br><br></span> <span class="sd"> <input type="submit" value="Share this traceback on a public Web site"></span> <span class="sd"> </div></span> <span class="sd"></form></span> <span class="sd"></div></span> <span class="sd">{% endif %}</span> <span class="sd">{% endif %}</span> <span class="sd"><div id="requestinfo"></span> <span class="sd"> <h2>Request information</h2></span> <span class="sd">{% if request %}</span> <span class="sd"> <h3 id="get-info">GET</h3></span> <span class="sd"> {% if request.GET %}</span> <span class="sd"> <table class="req"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Variable</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in request.GET.items %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0 }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd"> {% else %}</span> <span class="sd"> <p>No GET data</p></span> <span class="sd"> {% endif %}</span> <span class="sd"> <h3 id="post-info">POST</h3></span> <span class="sd"> {% if filtered_POST %}</span> <span class="sd"> <table class="req"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Variable</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in filtered_POST.items %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0 }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd"> {% else %}</span> <span class="sd"> <p>No POST data</p></span> <span class="sd"> {% endif %}</span> <span class="sd"> <h3 id="files-info">FILES</h3></span> <span class="sd"> {% if request.FILES %}</span> <span class="sd"> <table class="req"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Variable</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in request.FILES.items %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0 }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd"> {% else %}</span> <span class="sd"> <p>No FILES data</p></span> <span class="sd"> {% endif %}</span> <span class="sd"> <h3 id="cookie-info">COOKIES</h3></span> <span class="sd"> {% if request.COOKIES %}</span> <span class="sd"> <table class="req"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Variable</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in request.COOKIES.items %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0 }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd"> {% else %}</span> <span class="sd"> <p>No cookie data</p></span> <span class="sd"> {% endif %}</span> <span class="sd"> <h3 id="meta-info">META</h3></span> <span class="sd"> <table class="req"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Variable</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in request.META.items|dictsort:"0" %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0 }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd">{% else %}</span> <span class="sd"> <p>Request data not supplied</p></span> <span class="sd">{% endif %}</span> <span class="sd"> <h3 id="settings-info">Settings</h3></span> <span class="sd"> <h4>Using settings module <code>{{ settings.SETTINGS_MODULE }}</code></h4></span> <span class="sd"> <table class="req"></span> <span class="sd"> <thead></span> <span class="sd"> <tr></span> <span class="sd"> <th>Setting</th></span> <span class="sd"> <th>Value</th></span> <span class="sd"> </tr></span> <span class="sd"> </thead></span> <span class="sd"> <tbody></span> <span class="sd"> {% for var in settings.items|dictsort:"0" %}</span> <span class="sd"> <tr></span> <span class="sd"> <td>{{ var.0 }}</td></span> <span class="sd"> <td class="code"><pre>{{ var.1|pprint }}</pre></td></span> <span class="sd"> </tr></span> <span class="sd"> {% endfor %}</span> <span class="sd"> </tbody></span> <span class="sd"> </table></span> <span class="sd"></div></span> <span class="sd">{% if not is_email %}</span> <span class="sd"> <div id="explanation"></span> <span class="sd"> <p></span> <span class="sd"> You're seeing this error because you have <code>DEBUG = True</code> in your</span> <span class="sd"> Django settings file. Change that to <code>False</code>, and Django will</span> <span class="sd"> display a standard page generated by the handler for this status code.</span> <span class="sd"> </p></span> <span class="sd"> </div></span> <span class="sd">{% endif %}</span> <span class="sd"></body></span> <span class="sd"></html></span> <span class="sd">"""</span><span class="p">)</span> <span class="n">TECHNICAL_500_TEXT_TEMPLATE</span> <span class="o">=</span> <span class="s2">"""{</span><span class="si">% f</span><span class="s2">irstof exception_type 'Report' %}{</span><span class="si">% i</span><span class="s2">f request %} at {{ request.path_info }}{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">{</span><span class="si">% f</span><span class="s2">irstof exception_value 'No exception message supplied' %}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f request %}</span> <span class="s2">Request Method: {{ request.META.REQUEST_METHOD }}</span> <span class="s2">Request URL: {{ request.build_absolute_uri }}{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">Django Version: {{ django_version_info }}</span> <span class="s2">Python Executable: {{ sys_executable }}</span> <span class="s2">Python Version: {{ sys_version_info }}</span> <span class="s2">Python Path: {{ sys_path }}</span> <span class="s2">Server time: {{server_time|date:"r"}}</span> <span class="s2">Installed Applications:</span> <span class="s2">{{ settings.INSTALLED_APPS|pprint }}</span> <span class="s2">Installed Middleware:</span> <span class="s2">{{ settings.MIDDLEWARE_CLASSES|pprint }}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f template_does_not_exist %}Template loader Error:</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f loader_debug_info %}Django tried loading these templates, in this order:</span> <span class="s2">{</span><span class="si">% f</span><span class="s2">or loader in loader_debug_info %}Using loader {{ loader.loader }}:</span> <span class="s2">{</span><span class="si">% f</span><span class="s2">or t in loader.templates %}{{ t.name }} ({{ t.status }})</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">ndfor %}{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">lse %}Django couldn't find any templates because your 'loaders' option is empty!</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">ndif %}{</span><span class="si">% i</span><span class="s2">f template_info %}</span> <span class="s2">Template error:</span> <span class="s2">In template {{ template_info.name }}, error at line {{ template_info.line }}</span> <span class="s2"> {{ template_info.message }}{</span><span class="si">% f</span><span class="s2">or source_line in template_info.source_lines %}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">fequal source_line.0 template_info.line %}</span> <span class="s2"> {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">lse %}</span> <span class="s2"> {{ source_line.0 }} : {{ source_line.1 }}</span> <span class="s2"> {</span><span class="si">% e</span><span class="s2">ndifequal %}{</span><span class="si">% e</span><span class="s2">ndfor %}{</span><span class="si">% e</span><span class="s2">ndif %}{</span><span class="si">% i</span><span class="s2">f frames %}</span> <span class="s2">Traceback:</span> <span class="s2">{</span><span class="si">% f</span><span class="s2">or frame in frames %}File "{{ frame.filename }}" in {{ frame.function }}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f frame.context_line %} {{ frame.lineno }}. {{ frame.context_line }}{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f exception_type %}Exception Type: {{ exception_type }}{</span><span class="si">% i</span><span class="s2">f request %} at {{ request.path_info }}{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f exception_value %}Exception Value: {{ exception_value }}{</span><span class="si">% e</span><span class="s2">ndif %}{</span><span class="si">% e</span><span class="s2">ndif %}{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">{</span><span class="si">% i</span><span class="s2">f request %}Request information:</span> <span class="s2">GET:{</span><span class="si">% f</span><span class="s2">or k, v in request.GET.items %}</span> <span class="s2">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s2">mpty %} No GET data{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">POST:{</span><span class="si">% f</span><span class="s2">or k, v in filtered_POST.items %}</span> <span class="s2">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s2">mpty %} No POST data{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">FILES:{</span><span class="si">% f</span><span class="s2">or k, v in request.FILES.items %}</span> <span class="s2">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s2">mpty %} No FILES data{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">COOKIES:{</span><span class="si">% f</span><span class="s2">or k, v in request.COOKIES.items %}</span> <span class="s2">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s2">mpty %} No cookie data{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">META:{</span><span class="si">% f</span><span class="s2">or k, v in request.META.items|dictsort:"0" %}</span> <span class="s2">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">lse %}Request data not supplied</span> <span class="s2">{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2">Settings:</span> <span class="s2">Using settings module {{ settings.SETTINGS_MODULE }}{</span><span class="si">% f</span><span class="s2">or k, v in settings.items|dictsort:"0" %}</span> <span class="s2">{{ k }} = {{ v|stringformat:"r" }}{</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2">You're seeing this error because you have DEBUG = True in your</span> <span class="s2">Django settings file. Change that to False, and Django will</span> <span class="s2">display a standard page generated by the handler for this status code.</span> <span class="s2">"""</span> <span class="n">TECHNICAL_404_TEMPLATE</span> <span class="o">=</span> <span class="s2">"""</span> <span class="s2"><!DOCTYPE html></span> <span class="s2"><html lang="en"></span> <span class="s2"><head></span> <span class="s2"> <meta http-equiv="content-type" content="text/html; charset=utf-8"></span> <span class="s2"> <title>Page not found at {{ request.path_info|escape }}</title></span> <span class="s2"> <meta name="robots" content="NONE,NOARCHIVE"></span> <span class="s2"> <style type="text/css"></span> <span class="s2"> html * { padding:0; margin:0; }</span> <span class="s2"> body * { padding:10px 20px; }</span> <span class="s2"> body * * { padding:0; }</span> <span class="s2"> body { font:small sans-serif; background:#eee; }</span> <span class="s2"> body>div { border-bottom:1px solid #ddd; }</span> <span class="s2"> h1 { font-weight:normal; margin-bottom:.4em; }</span> <span class="s2"> h1 span { font-size:60%; color:#666; font-weight:normal; }</span> <span class="s2"> table { border:none; border-collapse: collapse; width:100%; }</span> <span class="s2"> td, th { vertical-align:top; padding:2px 3px; }</span> <span class="s2"> th { width:12em; text-align:right; color:#666; padding-right:.5em; }</span> <span class="s2"> #info { background:#f6f6f6; }</span> <span class="s2"> #info ol { margin: 0.5em 4em; }</span> <span class="s2"> #info ol li { font-family: monospace; }</span> <span class="s2"> #summary { background: #ffc; }</span> <span class="s2"> #explanation { background:#eee; border-bottom: 0px none; }</span> <span class="s2"> </style></span> <span class="s2"></head></span> <span class="s2"><body></span> <span class="s2"> <div id="summary"></span> <span class="s2"> <h1>Page not found <span>(404)</span></h1></span> <span class="s2"> <table class="meta"></span> <span class="s2"> <tr></span> <span class="s2"> <th>Request Method:</th></span> <span class="s2"> <td>{{ request.META.REQUEST_METHOD }}</td></span> <span class="s2"> </tr></span> <span class="s2"> <tr></span> <span class="s2"> <th>Request URL:</th></span> <span class="s2"> <td>{{ request.build_absolute_uri|escape }}</td></span> <span class="s2"> </tr></span> <span class="s2"> {</span><span class="si">% i</span><span class="s2">f raising_view_name %}</span> <span class="s2"> <tr></span> <span class="s2"> <th>Raised by:</th></span> <span class="s2"> <td>{{ raising_view_name }}</td></span> <span class="s2"> </tr></span> <span class="s2"> {</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2"> </table></span> <span class="s2"> </div></span> <span class="s2"> <div id="info"></span> <span class="s2"> {</span><span class="si">% i</span><span class="s2">f urlpatterns %}</span> <span class="s2"> <p></span> <span class="s2"> Using the URLconf defined in <code>{{ urlconf }}</code>,</span> <span class="s2"> Django tried these URL patterns, in this order:</span> <span class="s2"> </p></span> <span class="s2"> <ol></span> <span class="s2"> {</span><span class="si">% f</span><span class="s2">or pattern in urlpatterns %}</span> <span class="s2"> <li></span> <span class="s2"> {</span><span class="si">% f</span><span class="s2">or pat in pattern %}</span> <span class="s2"> {{ pat.regex.pattern }}</span> <span class="s2"> {</span><span class="si">% i</span><span class="s2">f forloop.last and pat.name %}[name='{{ pat.name }}']{</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2"> {</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2"> </li></span> <span class="s2"> {</span><span class="si">% e</span><span class="s2">ndfor %}</span> <span class="s2"> </ol></span> <span class="s2"> <p>The current URL, <code>{{ request_path|escape }}</code>, didn't match any of these.</p></span> <span class="s2"> {</span><span class="si">% e</span><span class="s2">lse %}</span> <span class="s2"> <p>{{ reason }}</p></span> <span class="s2"> {</span><span class="si">% e</span><span class="s2">ndif %}</span> <span class="s2"> </div></span> <span class="s2"> <div id="explanation"></span> <span class="s2"> <p></span> <span class="s2"> You're seeing this error because you have <code>DEBUG = True</code> in</span> <span class="s2"> your Django settings file. Change that to <code>False</code>, and Django</span> <span class="s2"> will display a standard 404 page.</span> <span class="s2"> </p></span> <span class="s2"> </div></span> <span class="s2"></body></span> <span class="s2"></html></span> <span class="s2">"""</span> <span class="n">DEFAULT_URLCONF_TEMPLATE</span> <span class="o">=</span> <span class="s2">"""</span> <span class="s2"><!DOCTYPE html></span> <span class="s2"><html lang="en"><head></span> <span class="s2"> <meta http-equiv="content-type" content="text/html; charset=utf-8"></span> <span class="s2"> <meta name="robots" content="NONE,NOARCHIVE"><title>{{ title }}</title></span> <span class="s2"> <style type="text/css"></span> <span class="s2"> html * { padding:0; margin:0; }</span> <span class="s2"> body * { padding:10px 20px; }</span> <span class="s2"> body * * { padding:0; }</span> <span class="s2"> body { font:small sans-serif; }</span> <span class="s2"> body>div { border-bottom:1px solid #ddd; }</span> <span class="s2"> h1 { font-weight:normal; }</span> <span class="s2"> h2 { margin-bottom:.8em; }</span> <span class="s2"> h2 span { font-size:80%; color:#666; font-weight:normal; }</span> <span class="s2"> h3 { margin:1em 0 .5em 0; }</span> <span class="s2"> h4 { margin:0 0 .5em 0; font-weight: normal; }</span> <span class="s2"> table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }</span> <span class="s2"> tbody td, tbody th { vertical-align:top; padding:2px 3px; }</span> <span class="s2"> thead th {</span> <span class="s2"> padding:1px 6px 1px 3px; background:#fefefe; text-align:left;</span> <span class="s2"> font-weight:normal; font-size:11px; border:1px solid #ddd;</span> <span class="s2"> }</span> <span class="s2"> tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }</span> <span class="s2"> #summary { background: #e0ebff; }</span> <span class="s2"> #summary h2 { font-weight: normal; color: #666; }</span> <span class="s2"> #explanation { background:#eee; }</span> <span class="s2"> #instructions { background:#f6f6f6; }</span> <span class="s2"> #summary table { border:none; background:transparent; }</span> <span class="s2"> </style></span> <span class="s2"></head></span> <span class="s2"><body></span> <span class="s2"><div id="summary"></span> <span class="s2"> <h1>{{ heading }}</h1></span> <span class="s2"> <h2>{{ subheading }}</h2></span> <span class="s2"></div></span> <span class="s2"><div id="instructions"></span> <span class="s2"> <p></span> <span class="s2"> {{ instructions|safe }}</span> <span class="s2"> </p></span> <span class="s2"></div></span> <span class="s2"><div id="explanation"></span> <span class="s2"> <p></span> <span class="s2"> {{ explanation|safe }}</span> <span class="s2"> </p></span> <span class="s2"></div></span> <span class="s2"></body></html></span> <span class="s2">"""</span> </pre></div> </div> </div> </div> <div class="yui-b" id="sidebar"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <h3>Browse</h3> <ul> </ul> <h3>You are here:</h3> <ul> <li> <a href="../../../index.html">Django 1.8.19 documentation</a> <ul><li><a href="../../index.html">Module code</a> <ul><li><a href="../../django.html">django</a> <ul><li>django.views.debug</li></ul> </li></ul></li></ul> </li> </ul> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <form class="search" action="../../../search.html" method="get"> <div><input type="text" name="q" /></div> <div><input type="submit" value="Go" /></div> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <h3>Last update:</h3> <p class="topless">Jan 06, 2019</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>