3
(h                 @   sp  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZmZ d dlmZmZ d dlmZmZmZ d d	lmZ d d
lmZmZ d dlmZ d dlm Z! eddZ"ej#dej$dZ%dZ&G dd de'Z(dd Z)dd Z*d-ddZ+ej dd Z,dd Z-G dd  d e'Z.G d!d" d"e.Z/G d#d$ d$e'Z0d%d& Z1d'd( Z2d)Z3d*Z4d+Z5d,Z6dS ).    )unicode_literalsN)settings)HttpResponseHttpResponseNotFound)ContextEngineTemplateDoesNotExist)force_escapepprint)Resolver404resolve)	lru_cachesixtimezone)MultiValueDict)force_bytes
smart_text)import_string)ugettextT)debugz#API|TOKEN|KEY|SECRET|PASS|SIGNATURE)flagsz********************c               @   s    e Zd ZdZdd Zdd ZdS )CallableSettingWrapperz Object to wrap callable appearing in settings

    * Not to call in the debug page (#21345).
    * Not to break the debug page if the callable forbidding to set attributes (#23070).
    c             C   s
   || _ d S )N)_wrapped)selfZcallable_setting r   6/tmp/pip-install-q3hcpn_q/Django/django/views/debug.py__init__!   s    zCallableSettingWrapper.__init__c             C   s
   t | jS )N)reprr   )r   r   r   r   __repr__$   s    zCallableSettingWrapper.__repr__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s   r   c             C   sd   y6t j| rt}n"t|tr0dd |j D }n|}W n tk
rN   |}Y nX t|r`t|}|S )zCleanse an individual setting key/value of sensitive content.

    If the value is a dictionary, recursively cleanse the keys in
    that dictionary.
    c             S   s   i | ]\}}t |||qS r   )cleanse_setting).0kvr   r   r   
<dictcomp>3   s    z#cleanse_setting.<locals>.<dictcomp>)	HIDDEN_SETTINGSsearchCLEANSED_SUBSTITUTE
isinstancedictitems	TypeErrorcallabler   )keyvaluecleansedr   r   r   r#   (   s    


r#   c              C   s6   i } x,t tD ] }|j rt|tt|| |< qW | S )zQReturns a dictionary of the settings module, with sensitive settings blurred out.)dirr   isupperr#   getattr)Zsettings_dictr%   r   r   r   get_safe_settingsA   s
    r6     c             C   sF   t | |||}| j r,|j }t||ddS |j }t||ddS dS )z
    Create a technical server error response. The last three arguments are
    the values returned from sys.exc_info() and friends.
    z
text/plain)statuscontent_typez	text/htmlN)ExceptionReporterZis_ajaxget_traceback_textr   get_traceback_html)requestexc_type	exc_valuetbstatus_codeZreportertexthtmlr   r   r   technical_500_responseJ   s    rD   c               C   s   t tj S )N)r   r   Z!DEFAULT_EXCEPTION_REPORTER_FILTERr   r   r   r   %get_default_exception_reporter_filterX   s    rE   c             C   s   t  }t| d|S )NZexception_reporter_filter)rE   r5   )r=   Zdefault_filterr   r   r   get_exception_reporter_filter^   s    rF   c               @   s    e Zd ZdZdd Zdd ZdS )ExceptionReporterFilterzv
    Base for all exception reporter filter classes. All overridable hooks
    contain lenient default behaviors.
    c             C   s   |d kri S |j S d S )N)POST)r   r=   r   r   r   get_post_parametersi   s    z+ExceptionReporterFilter.get_post_parametersc             C   s   t |jj S )N)listf_localsr-   )r   r=   tb_framer   r   r   get_traceback_frame_variableso   s    z5ExceptionReporterFilter.get_traceback_frame_variablesN)r   r    r!   r"   rI   rM   r   r   r   r   rG   c   s   rG   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )SafeExceptionReporterFilterz
    Use annotations made by the sensitive_post_parameters and
    sensitive_variables decorators to filter out sensitive information.
    c             C   s
   t jdkS )a  
        This filter is to add safety in production environments (i.e. DEBUG
        is False). If DEBUG is True then your site is not safe anyway.
        This hook is provided as a convenience to easily activate or
        deactivate the filter on a per request basis.
        F)r   DEBUG)r   r=   r   r   r   	is_activey   s    z%SafeExceptionReporterFilter.is_activec             C   sD   t |dg }| j|r@|r@|j }x|D ]}||kr(t||< q(W |S )z
        Replaces the keys in a MultiValueDict marked as sensitive with stars.
        This mitigates leaking sensitive POST parameters if something like
        request.POST['nonexistent_key'] throws an exception (#21098).
        sensitive_post_parameters)r5   rP   copyr*   )r   r=   ZmultivaluedictrQ   paramr   r   r   get_cleansed_multivaluedict   s    
z7SafeExceptionReporterFilter.get_cleansed_multivaluedictc             C   s   |dkri S t |dg }| j|r~|r~|jj }|dkrZx|j D ]\}}t||< qBW |S x|D ]}||kr`t||< q`W |S n|jS dS )zl
        Replaces the values of POST parameters marked as sensitive with
        stars (*********).
        NrQ   __ALL__)r5   rP   rH   rR   r-   r*   )r   r=   rQ   r2   r%   r&   rS   r   r   r   rI      s    

z/SafeExceptionReporterFilter.get_post_parametersc             C   sL   yt |t}W n( tk
r6 } zdj||S d }~X nX |rH| j||}|S )Nz{!r} while evaluating {!r})r+   r   	ExceptionformatrT   )r   r=   r1   Zis_multivalue_dicter   r   r   cleanse_special_types   s    z1SafeExceptionReporterFilter.cleanse_special_typesc       	      C   s  |j }d}x@|dk	rJ|jjdkrBd|jkrB|jd }t|dd}P |j }qW i }| j|r|r|dkrxZ|jj D ]\}}t||< qrW qxb|jj D ]*\}}||krt}n| j||}|||< qW n(x&|jj D ]\}}| j||||< qW |jjdkrd|jkrt|d< t|d< |j S )zf
        Replaces the values of variables marked as sensitive with
        stars (*********).
        NZsensitive_variables_wrappersensitive_variablesrU   	func_argsZfunc_kwargs)	f_backf_codeco_namerK   r5   rP   r-   r*   rY   )	r   r=   rL   current_framerZ   wrapperr2   namer1   r   r   r   rM      s4    



z9SafeExceptionReporterFilter.get_traceback_frame_variablesN)	r   r    r!   r"   rP   rT   rI   rY   rM   r   r   r   r   rN   s   s   	rN   c               @   sL   e Zd ZdZdddZdd Zdd Zd	d
 ZdddZdd Z	dd Z
dS )r:   zE
    A class to organize and coordinate reporting on exceptions.
    Fc             C   st   || _ t| j | _|| _|| _|| _|| _t| jdd | _d| _	d | _
t| jtjrptd| j | _t| j| _d S )NZtemplate_debugFzDeprecated String Exception: %r)r=   rF   filterr>   r?   r@   is_emailr5   template_infotemplate_does_not_exist
postmortemr+   r   string_typesrV   type)r   r=   r>   r?   r@   rc   r   r   r   r      s    zExceptionReporter.__init__c             C   s  | j r*t| j tr*d| _| jjp&| jg| _| j }xt|D ]\}}d|krg }xj|d D ]^\}}t	|}t
|tjr|jdd}t|dkrd|dd t|f }|j|t|f qZW ||d< |||< q<W d}| j ot| j trRt| jd	d
}t| jdd
}	|d
k	rR|	d
k	rR| jjd }
t|
t|d dt|	d t|
 ddd}ddlm} | j||| j| jj| jt tjdtj dd  t!j" | tj#| j$| j| jd}| j r| j j%|d< | jrt| jdd|d< |r|d |d< |S )z5Return a dictionary containing traceback information.Tvarszutf-8replacei   z%s... <trimmed %d bytes string>r    startNend      ascii)errors)get_versionz%d.%d.%d   )rc   unicode_hintframesr=   Zfiltered_POSTr   Zsys_executableZsys_version_infoZserver_timeZdjango_version_infosys_pathrd   re   rf   Zexception_typeZexception_valueZ	lastframe)&r>   
issubclassr   re   r?   chainrf   get_traceback_frames	enumerater
   r+   r   binary_typedecodelenappendr	   UnicodeErrorr5   argsr   maxmindjangorr   rc   r=   rb   rI   r6   sys
executableversion_infor   nowpathrd   r   )r   ru   iframeZ
frame_varsr%   r&   rt   rl   rm   Zunicode_strrr   cr   r   r   get_traceback_data   s^    "

z$ExceptionReporter.get_traceback_datac             C   s$   t jt}t| j dd}|j|S )z1Return HTML version of debug 500 HTTP error page.F)use_l10n)DEBUG_ENGINEfrom_stringTECHNICAL_500_TEMPLATEr   r   render)r   tr   r   r   r   r<   9  s    
z$ExceptionReporter.get_traceback_htmlc             C   s&   t jt}t| j ddd}|j|S )z7Return plain text version of debug 500 HTTP error page.F)Z
autoescaper   )r   r   TECHNICAL_500_TEXT_TEMPLATEr   r   r   )r   r   r   r   r   r   r;   ?  s    
z$ExceptionReporter.get_traceback_textNc                sL  d}|dk	rJt |drJy|j|}W n tk
r8   Y nX |dk	rJ|j }|dkry&t|d}|j j }W dQ R X W n ttfk
r   Y nX |dkrdg dg fS t|d t	j
rd x6|dd D ]&}tjd|}	|	r|	jdjd P qW  fd	d
|D }td|| }
|| }||
| }|| }||d | }|
|||fS )z
        Returns context_lines before and after lineno from file.
        Returns (pre_context_lineno, pre_context, context_line, post_context).
        N
get_sourcerbr   rp      s   coding[:=]\s*([-\w.]+)rn   c                s   g | ]}t j| d qS )rj   )r   	text_type)r$   sline)encodingr   r   
<listcomp>g  s    z:ExceptionReporter._get_lines_from_file.<locals>.<listcomp>)hasattrr   ImportError
splitlinesopenreadOSErrorIOErrorr+   r   r|   rer)   groupr}   r   )r   filenamelinenoZcontext_linesloadermodule_namesourcefplinematchZlower_boundZupper_boundpre_contextcontext_linepost_contextr   )r   r   _get_lines_from_fileE  s<    z&ExceptionReporter._get_lines_from_filec             C   sz  dd }g }| j }x|r,|j| ||}qW g }|s:|S |j }tjsN| rT| jn|j}x|d k	rt|jjj	dr~|j
}q^|jjj}|jjj}|jd }|jjj	d}	|jjj	dpd}
| j||d|	|
\}}}}|d k	r<|j||t|d	d
||
jdrdnd|||d | jj| j|jt|||||d d tjrL|j
}q^|j
 rl|rl|j }|j}q^|j
}q^W |S )Nc             S   s    t | dd }t | dd }|p|S )N	__cause____context__)r5   )r?   explicitZimplicitr   r   r   explicit_or_implicit_causes  s    zJExceptionReporter.get_traceback_frames.<locals>.explicit_or_implicit_causeZ__traceback_hide__rn   
__loader__r   rk      r   Tzdjango.r   user)Z	exc_causeZexc_cause_explicitr@   rh   r   functionr   ri   idr   r   r   pre_context_lineno)r?   r   popr   PY2r@   __traceback__rL   rK   gettb_nextr]   co_filenamer^   	tb_lineno	f_globalsr   r5   
startswithrb   rM   r=   r   )r   r   
exceptionsr?   ru   r@   r   r   r   r   r   r   r   r   r   r   r   r   rz   r  sX    






z&ExceptionReporter.get_traceback_framesc             C   sJ   ddl }| j }dd |D }dg}||j|7 }||j| j| j7 }|S )zJ
        Return the same data as from traceback.format_exception.
        r   Nc             S   s(   g | ] }|d  |d |d |d fqS )r   r   r   r   r   )r$   fr   r   r   r     s    z6ExceptionReporter.format_exception.<locals>.<listcomp>z#Traceback (most recent call last):
)	tracebackrz   format_listformat_exception_onlyr>   r?   )r   r   ru   r@   rJ   r   r   r   format_exception  s    z"ExceptionReporter.format_exception)F)NN)r   r    r!   r"   r   r   r<   r;   r   rz   r   r   r   r   r   r:      s   
:
-Cr:   c          "   C   s  y|j d d }W n( tttfk
r:   | jdd }Y nX y|j d d }W n tttfk
rl   g }Y nnX | s| jdkrt|dkrt|d dkrt|d d ddt|d d d	d  kod
kn  rt| S t| dt	j
}t|tjr|j}d}yt| j}W n tk
r"   Y n\X |j}t|dr>|j}n"t|dr`t|jdr`|jj}t|dr~|j}d||f }tjt}	t|t	j
||t|dd| t |d}
t|	j|
ddS )zKCreate a technical 404 error response. The exception should be the Http404.r   r   rn   Ntried/Zapp_namerk   	namespaceZadminurlconfr   	__class__r    z%s.%srj   )rq   )r   Zroot_urlconfrequest_pathZurlpatternsreasonr=   r   Zraising_view_namez	text/html)r9   )r   
IndexErrorr.   KeyErrorZ	path_infor   r~   r5   default_urlconfr   ZROOT_URLCONFr+   types
ModuleTyper   r   r   funcr   r   r    r   r   TECHNICAL_404_TEMPLATEr   r   r6   r   r   )r=   	exceptionZ	error_urlr   r   ZcallerZresolver_matchobjmoduler   r   r   r   r   technical_404_response  sR    

8


r   c             C   sD   t jt}ttdtdtdtdtdd}t|j|ddS )	z+Create an empty URLconf 404 error response.zWelcome to Djangoz
It worked!z2Congratulations on your first Django-powered page.zOf course, you haven't actually done any work yet. Next, start your first app by running <code>python manage.py startapp [app_label]</code>.zYou're seeing this message because you have <code>DEBUG = True</code> in your Django settings file and you haven't configured any URLs. Get to work!)titleheadingZ
subheadingZinstructionsZexplanationz	text/html)r9   )r   r   DEFAULT_URLCONF_TEMPLATEr   _r   r   )r=   r   r   r   r   r   r     s    
r   aKG  
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE">
  <title>{% if exception_type %}{{ exception_type }}{% else %}Report{% endif %}{% if request %} at {{ request.path_info|escape }}{% endif %}</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; }
    h2 { margin-bottom:.8em; }
    h2 span { font-size:80%; color:#666; font-weight:normal; }
    h3 { margin:1em 0 .5em 0; }
    h4 { margin:0 0 .5em 0; font-weight: normal; }
    code, pre { font-size: 100%; white-space: pre-wrap; }
    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
    tbody td, tbody th { vertical-align:top; padding:2px 3px; }
    thead th {
      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
      font-weight:normal; font-size:11px; border:1px solid #ddd;
    }
    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
    table.vars { margin:5px 0 2px 40px; }
    table.vars td, table.req td { font-family:monospace; }
    table td.code { width:100%; }
    table td.code pre { overflow:hidden; }
    table.source th { color:#666; }
    table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
    ul.traceback { list-style-type:none; color: #222; }
    ul.traceback li.frame { padding-bottom:1em; color:#666; }
    ul.traceback li.user { background-color:#e0e0e0; color:#000 }
    div.context { padding:10px 0; overflow:hidden; }
    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }
    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }
    div.context ol li pre { display:inline; }
    div.context ol.context-line li { color:#505050; background-color:#dfdfdf; padding: 3px 2px; }
    div.context ol.context-line li span { position:absolute; right:32px; }
    .user div.context ol.context-line li { background-color:#bbb; color:#000; }
    .user div.context ol li { color:#666; }
    div.commands { margin-left: 40px; }
    div.commands a { color:#555; text-decoration:none; }
    .user div.commands a { color: black; }
    #summary { background: #ffc; }
    #summary h2 { font-weight: normal; color: #666; }
    #explanation { background:#eee; }
    #template, #template-not-exist { background:#f6f6f6; }
    #template-not-exist ul { margin: 0 0 10px 20px; }
    #template-not-exist .postmortem-section { margin-bottom: 3px; }
    #unicode-hint { background:#eee; }
    #traceback { background:#eee; }
    #requestinfo { background:#f6f6f6; padding-left:120px; }
    #summary table { border:none; background:transparent; }
    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
    #requestinfo h3 { margin-bottom:-1em; }
    .error { background: #ffc; }
    .specific { color:#cc3300; font-weight:bold; }
    h2 span.commands { font-size:.7em;}
    span.commands a:link {color:#5E5694;}
    pre.exception_value { font-family: sans-serif; color: #666; font-size: 1.5em; margin: 10px 0 10px 0; }
    .append-bottom { margin-bottom: 10px; }
  </style>
  {% if not is_email %}
  <script type="text/javascript">
  //<!--
    function getElementsByClassName(oElm, strTagName, strClassName){
        // Written by Jonathan Snook, http://www.snook.ca/jon; Add-ons by Robert Nyman, http://www.robertnyman.com
        var arrElements = (strTagName == "*" && document.all)? document.all :
        oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        strClassName = strClassName.replace(/\-/g, "\-");
        var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
        var oElement;
        for(var i=0; i<arrElements.length; i++){
            oElement = arrElements[i];
            if(oRegExp.test(oElement.className)){
                arrReturnElements.push(oElement);
            }
        }
        return (arrReturnElements)
    }
    function hideAll(elems) {
      for (var e = 0; e < elems.length; e++) {
        elems[e].style.display = 'none';
      }
    }
    window.onload = function() {
      hideAll(getElementsByClassName(document, 'table', 'vars'));
      hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
      hideAll(getElementsByClassName(document, 'ol', 'post-context'));
      hideAll(getElementsByClassName(document, 'div', 'pastebin'));
    }
    function toggle() {
      for (var i = 0; i < arguments.length; i++) {
        var e = document.getElementById(arguments[i]);
        if (e) {
          e.style.display = e.style.display == 'none' ? 'block': 'none';
        }
      }
      return false;
    }
    function varToggle(link, id) {
      toggle('v' + id);
      var s = link.getElementsByTagName('span')[0];
      var uarr = String.fromCharCode(0x25b6);
      var darr = String.fromCharCode(0x25bc);
      s.textContent = s.textContent == uarr ? darr : uarr;
      return false;
    }
    function switchPastebinFriendly(link) {
      s1 = "Switch to copy-and-paste view";
      s2 = "Switch back to interactive view";
      link.textContent = link.textContent.trim() == s1 ? s2: s1;
      toggle('browserTraceback', 'pastebinTraceback');
      return false;
    }
    //-->
  </script>
  {% endif %}
</head>
<body>
<div id="summary">
  <h1>{% if exception_type %}{{ exception_type }}{% else %}Report{% endif %}{% if request %} at {{ request.path_info|escape }}{% endif %}</h1>
  <pre class="exception_value">{% if exception_value %}{{ exception_value|force_escape }}{% else %}No exception message supplied{% endif %}</pre>
  <table class="meta">
{% if request %}
    <tr>
      <th>Request Method:</th>
      <td>{{ request.META.REQUEST_METHOD }}</td>
    </tr>
    <tr>
      <th>Request URL:</th>
      <td>{{ request.get_raw_uri|escape }}</td>
    </tr>
{% endif %}
    <tr>
      <th>Django Version:</th>
      <td>{{ django_version_info }}</td>
    </tr>
{% if exception_type %}
    <tr>
      <th>Exception Type:</th>
      <td>{{ exception_type }}</td>
    </tr>
{% endif %}
{% if exception_type and exception_value %}
    <tr>
      <th>Exception Value:</th>
      <td><pre>{{ exception_value|force_escape }}</pre></td>
    </tr>
{% endif %}
{% if lastframe %}
    <tr>
      <th>Exception Location:</th>
      <td>{{ lastframe.filename|escape }} in {{ lastframe.function|escape }}, line {{ lastframe.lineno }}</td>
    </tr>
{% endif %}
    <tr>
      <th>Python Executable:</th>
      <td>{{ sys_executable|escape }}</td>
    </tr>
    <tr>
      <th>Python Version:</th>
      <td>{{ sys_version_info }}</td>
    </tr>
    <tr>
      <th>Python Path:</th>
      <td><pre>{{ sys_path|pprint }}</pre></td>
    </tr>
    <tr>
      <th>Server time:</th>
      <td>{{server_time|date:"r"}}</td>
    </tr>
  </table>
</div>
{% if unicode_hint %}
<div id="unicode-hint">
    <h2>Unicode error hint</h2>
    <p>The string that could not be encoded/decoded was: <strong>{{ unicode_hint|force_escape }}</strong></p>
</div>
{% endif %}
{% if template_does_not_exist %}
<div id="template-not-exist">
    <h2>Template-loader postmortem</h2>
    {% if postmortem %}
        <p class="append-bottom">Django tried loading these templates, in this order:</p>
        {% for entry in postmortem %}
            <p class="postmortem-section">Using engine <code>{{ entry.backend.name }}</code>:</p>
            <ul>
                {% if entry.tried %}
                    {% for attempt in entry.tried %}
                        <li><code>{{ attempt.0.loader_name }}</code>: {{ attempt.0.name }} ({{ attempt.1 }})</li>
                    {% endfor %}
                {% else %}
                    <li>This engine did not provide a list of tried templates.</li>
                {% endif %}
            </ul>
        {% endfor %}
    {% else %}
        <p>No templates were found because your 'TEMPLATES' setting is not configured.</p>
    {% endif %}
</div>
{% endif %}
{% if template_info %}
<div id="template">
   <h2>Error during template rendering</h2>
   <p>In template <code>{{ template_info.name }}</code>, error at line <strong>{{ template_info.line }}</strong></p>
   <h3>{{ template_info.message }}</h3>
   <table class="source{% if template_info.top %} cut-top{% endif %}
      {% if template_info.bottom != template_info.total %} cut-bottom{% endif %}">
   {% for source_line in template_info.source_lines %}
   {% if source_line.0 == template_info.line %}
   <tr class="error"><th>{{ source_line.0 }}</th>
     <td>{{ template_info.before }}<span class="specific">{{ template_info.during }}</span>{{ template_info.after }}</td>
   </tr>
   {% else %}
      <tr><th>{{ source_line.0 }}</th>
      <td>{{ source_line.1 }}</td></tr>
   {% endif %}
   {% endfor %}
   </table>
</div>
{% endif %}
{% if frames %}
<div id="traceback">
  <h2>Traceback <span class="commands">{% if not is_email %}<a href="#" onclick="return switchPastebinFriendly(this);">
    Switch to copy-and-paste view</a></span>{% endif %}
  </h2>
  {% autoescape off %}
  <div id="browserTraceback">
    <ul class="traceback">
      {% for frame in frames %}
        {% ifchanged frame.exc_cause %}{% if frame.exc_cause %}
          <li><h3>
          {% if frame.exc_cause_explicit %}
            The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception:
          {% else %}
            During handling of the above exception ({{ frame.exc_cause }}), another exception occurred:
          {% endif %}
        </h3></li>
        {% endif %}{% endifchanged %}
        <li class="frame {{ frame.type }}">
          <code>{{ frame.filename|escape }}</code> in <code>{{ frame.function|escape }}</code>

          {% if frame.context_line %}
            <div class="context" id="c{{ frame.id }}">
              {% if frame.pre_context and not is_email %}
                <ol start="{{ frame.pre_context_lineno }}" class="pre-context" id="pre{{ frame.id }}">
                {% for line in frame.pre_context %}
                  <li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ line|escape }}</pre></li>
                {% endfor %}
                </ol>
              {% endif %}
              <ol start="{{ frame.lineno }}" class="context-line">
                <li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>
{{ frame.context_line|escape }}</pre>{% if not is_email %} <span>...</span>{% endif %}</li></ol>
              {% if frame.post_context and not is_email  %}
                <ol start='{{ frame.lineno|add:"1" }}' class="post-context" id="post{{ frame.id }}">
                  {% for line in frame.post_context %}
                  <li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')"><pre>{{ line|escape }}</pre></li>
                  {% endfor %}
              </ol>
              {% endif %}
            </div>
          {% endif %}

          {% if frame.vars %}
            <div class="commands">
                {% if is_email %}
                    <h2>Local Vars</h2>
                {% else %}
                    <a href="#" onclick="return varToggle(this, '{{ frame.id }}')"><span>&#x25b6;</span> Local vars</a>
                {% endif %}
            </div>
            <table class="vars" id="v{{ frame.id }}">
              <thead>
                <tr>
                  <th>Variable</th>
                  <th>Value</th>
                </tr>
              </thead>
              <tbody>
                {% for var in frame.vars|dictsort:0 %}
                  <tr>
                    <td>{{ var.0|force_escape }}</td>
                    <td class="code"><pre>{{ var.1 }}</pre></td>
                  </tr>
                {% endfor %}
              </tbody>
            </table>
          {% endif %}
        </li>
      {% endfor %}
    </ul>
  </div>
  {% endautoescape %}
  <form action="http://dpaste.com/" name="pasteform" id="pasteform" method="post">
{% if not is_email %}
  <div id="pastebinTraceback" class="pastebin">
    <input type="hidden" name="language" value="PythonConsole">
    <input type="hidden" name="title"
      value="{{ exception_type|escape }}{% if request %} at {{ request.path_info|escape }}{% endif %}">
    <input type="hidden" name="source" value="Django Dpaste Agent">
    <input type="hidden" name="poster" value="Django">
    <textarea name="content" id="traceback_area" cols="140" rows="25">
Environment:

{% if request %}
Request Method: {{ request.META.REQUEST_METHOD }}
Request URL: {{ request.get_raw_uri|escape }}
{% endif %}
Django Version: {{ django_version_info }}
Python Version: {{ sys_version_info }}
Installed Applications:
{{ settings.INSTALLED_APPS|pprint }}
Installed Middleware:
{% if settings.MIDDLEWARE is not None %}{{ settings.MIDDLEWARE|pprint }}{% else %}{{ settings.MIDDLEWARE_CLASSES|pprint }}{% endif %}

{% if template_does_not_exist %}Template loader postmortem
{% if postmortem %}Django tried loading these templates, in this order:
{% for entry in postmortem %}
Using engine {{ entry.backend.name }}:
{% if entry.tried %}{% for attempt in entry.tried %}    * {{ attempt.0.loader_name }}: {{ attempt.0.name }} ({{ attempt.1 }})
{% endfor %}{% else %}    This engine did not provide a list of tried templates.
{% endif %}{% endfor %}
{% else %}No templates were found because your 'TEMPLATES' setting is not configured.
{% endif %}{% endif %}{% if template_info %}
Template error:
In template {{ template_info.name }}, error at line {{ template_info.line }}
   {{ template_info.message }}{% for source_line in template_info.source_lines %}{% if source_line.0 == template_info.line %}   {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}{% else %}   {{ source_line.0 }} : {{ source_line.1 }}{% endif %}{% endfor %}{% endif %}

Traceback:{% for frame in frames %}
{% ifchanged frame.exc_cause %}{% if frame.exc_cause %}{% if frame.exc_cause_explicit %}
The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception:
{% else %}
During handling of the above exception ({{ frame.exc_cause }}), another exception occurred:
{% endif %}{% endif %}{% endifchanged %}
File "{{ frame.filename|escape }}" in {{ frame.function|escape }}
{% if frame.context_line %}  {{ frame.lineno }}. {{ frame.context_line|escape }}{% endif %}{% endfor %}

Exception Type: {{ exception_type|escape }}{% if request %} at {{ request.path_info|escape }}{% endif %}
Exception Value: {{ exception_value|force_escape }}
</textarea>
  <br><br>
  <input type="submit" value="Share this traceback on a public website">
  </div>
</form>
</div>
{% endif %}
{% endif %}

<div id="requestinfo">
  <h2>Request information</h2>

{% if request %}
  {% if request.user %}
    <h3 id="user-info">USER</h3>
    <p>{{ request.user }}</p>
  {% endif %}

  <h3 id="get-info">GET</h3>
  {% if request.GET %}
    <table class="req">
      <thead>
        <tr>
          <th>Variable</th>
          <th>Value</th>
        </tr>
      </thead>
      <tbody>
        {% for var in request.GET.items %}
          <tr>
            <td>{{ var.0 }}</td>
            <td class="code"><pre>{{ var.1|pprint }}</pre></td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  {% else %}
    <p>No GET data</p>
  {% endif %}

  <h3 id="post-info">POST</h3>
  {% if filtered_POST %}
    <table class="req">
      <thead>
        <tr>
          <th>Variable</th>
          <th>Value</th>
        </tr>
      </thead>
      <tbody>
        {% for var in filtered_POST.items %}
          <tr>
            <td>{{ var.0 }}</td>
            <td class="code"><pre>{{ var.1|pprint }}</pre></td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  {% else %}
    <p>No POST data</p>
  {% endif %}
  <h3 id="files-info">FILES</h3>
  {% if request.FILES %}
    <table class="req">
        <thead>
            <tr>
                <th>Variable</th>
                <th>Value</th>
            </tr>
        </thead>
        <tbody>
            {% for var in request.FILES.items %}
                <tr>
                    <td>{{ var.0 }}</td>
                    <td class="code"><pre>{{ var.1|pprint }}</pre></td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
  {% else %}
    <p>No FILES data</p>
  {% endif %}


  <h3 id="cookie-info">COOKIES</h3>
  {% if request.COOKIES %}
    <table class="req">
      <thead>
        <tr>
          <th>Variable</th>
          <th>Value</th>
        </tr>
      </thead>
      <tbody>
        {% for var in request.COOKIES.items %}
          <tr>
            <td>{{ var.0 }}</td>
            <td class="code"><pre>{{ var.1|pprint }}</pre></td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  {% else %}
    <p>No cookie data</p>
  {% endif %}

  <h3 id="meta-info">META</h3>
  <table class="req">
    <thead>
      <tr>
        <th>Variable</th>
        <th>Value</th>
      </tr>
    </thead>
    <tbody>
      {% for var in request.META.items|dictsort:0 %}
        <tr>
          <td>{{ var.0 }}</td>
          <td class="code"><pre>{{ var.1|pprint }}</pre></td>
        </tr>
      {% endfor %}
    </tbody>
  </table>
{% else %}
  <p>Request data not supplied</p>
{% endif %}

  <h3 id="settings-info">Settings</h3>
  <h4>Using settings module <code>{{ settings.SETTINGS_MODULE }}</code></h4>
  <table class="req">
    <thead>
      <tr>
        <th>Setting</th>
        <th>Value</th>
      </tr>
    </thead>
    <tbody>
      {% for var in settings.items|dictsort:0 %}
        <tr>
          <td>{{ var.0 }}</td>
          <td class="code"><pre>{{ var.1|pprint }}</pre></td>
        </tr>
      {% endfor %}
    </tbody>
  </table>

</div>
{% if not is_email %}
  <div id="explanation">
    <p>
      You're seeing this error because you have <code>DEBUG = True</code> in your
      Django settings file. Change that to <code>False</code>, and Django will
      display a standard page generated by the handler for this status code.
    </p>
  </div>
{% endif %}
</body>
</html>
a  {% firstof exception_type 'Report' %}{% if request %} at {{ request.path_info }}{% endif %}
{% firstof exception_value 'No exception message supplied' %}
{% if request %}
Request Method: {{ request.META.REQUEST_METHOD }}
Request URL: {{ request.get_raw_uri }}{% endif %}
Django Version: {{ django_version_info }}
Python Executable: {{ sys_executable }}
Python Version: {{ sys_version_info }}
Python Path: {{ sys_path }}
Server time: {{server_time|date:"r"}}
Installed Applications:
{{ settings.INSTALLED_APPS|pprint }}
Installed Middleware:
{% if settings.MIDDLEWARE is not None %}{{ settings.MIDDLEWARE|pprint }}{% else %}{{ settings.MIDDLEWARE_CLASSES|pprint }}{% endif %}
{% if template_does_not_exist %}Template loader postmortem
{% if postmortem %}Django tried loading these templates, in this order:
{% for entry in postmortem %}
Using engine {{ entry.backend.name }}:
{% if entry.tried %}{% for attempt in entry.tried %}    * {{ attempt.0.loader_name }}: {{ attempt.0.name }} ({{ attempt.1 }})
{% endfor %}{% else %}    This engine did not provide a list of tried templates.
{% endif %}{% endfor %}
{% else %}No templates were found because your 'TEMPLATES' setting is not configured.
{% endif %}
{% endif %}{% if template_info %}
Template error:
In template {{ template_info.name }}, error at line {{ template_info.line }}
   {{ template_info.message }}
{% for source_line in template_info.source_lines %}{% if source_line.0 == template_info.line %}   {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}{% else %}   {{ source_line.0 }} : {{ source_line.1 }}{% endif %}{% endfor %}{% endif %}{% if frames %}

Traceback:{% for frame in frames %}{% ifchanged frame.exc_cause %}  {% if frame.exc_cause %}
    {% if frame.exc_cause_explicit %}
      The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception:
    {% else %}
      During handling of the above exception ({{ frame.exc_cause }}), another exception occurred:
    {% endif %}
  {% endif %}
{% endifchanged %}
File "{{ frame.filename }}" in {{ frame.function }}
{% if frame.context_line %}  {{ frame.lineno }}. {{ frame.context_line }}{% endif %}
{% endfor %}
{% if exception_type %}Exception Type: {{ exception_type }}{% if request %} at {{ request.path_info }}{% endif %}
{% if exception_value %}Exception Value: {{ exception_value }}{% endif %}{% endif %}{% endif %}
{% if request %}Request information:
{% if request.user %}USER: {{ request.user }}{% endif %}

GET:{% for k, v in request.GET.items %}
{{ k }} = {{ v|stringformat:"r" }}{% empty %} No GET data{% endfor %}

POST:{% for k, v in filtered_POST.items %}
{{ k }} = {{ v|stringformat:"r" }}{% empty %} No POST data{% endfor %}

FILES:{% for k, v in request.FILES.items %}
{{ k }} = {{ v|stringformat:"r" }}{% empty %} No FILES data{% endfor %}

COOKIES:{% for k, v in request.COOKIES.items %}
{{ k }} = {{ v|stringformat:"r" }}{% empty %} No cookie data{% endfor %}

META:{% for k, v in request.META.items|dictsort:0 %}
{{ k }} = {{ v|stringformat:"r" }}{% endfor %}
{% else %}Request data not supplied
{% endif %}
Settings:
Using settings module {{ settings.SETTINGS_MODULE }}{% for k, v in settings.items|dictsort:0 %}
{{ k }} = {{ v|stringformat:"r" }}{% endfor %}

{% if not is_email %}
You're seeing this error because you have DEBUG = True in your
Django settings file. Change that to False, and Django will
display a standard page generated by the handler for this status code.
{% endif %}
aJ	  
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Page not found at {{ request.path_info|escape }}</title>
  <meta name="robots" content="NONE,NOARCHIVE">
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    table { border:none; border-collapse: collapse; width:100%; }
    td, th { vertical-align:top; padding:2px 3px; }
    th { width:12em; text-align:right; color:#666; padding-right:.5em; }
    #info { background:#f6f6f6; }
    #info ol { margin: 0.5em 4em; }
    #info ol li { font-family: monospace; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
  <div id="summary">
    <h1>Page not found <span>(404)</span></h1>
    <table class="meta">
      <tr>
        <th>Request Method:</th>
        <td>{{ request.META.REQUEST_METHOD }}</td>
      </tr>
      <tr>
        <th>Request URL:</th>
        <td>{{ request.build_absolute_uri|escape }}</td>
      </tr>
      {% if raising_view_name %}
      <tr>
        <th>Raised by:</th>
        <td>{{ raising_view_name }}</td>
      </tr>
      {% endif %}
    </table>
  </div>
  <div id="info">
    {% if urlpatterns %}
      <p>
      Using the URLconf defined in <code>{{ urlconf }}</code>,
      Django tried these URL patterns, in this order:
      </p>
      <ol>
        {% for pattern in urlpatterns %}
          <li>
            {% for pat in pattern %}
                {{ pat.regex.pattern }}
                {% if forloop.last and pat.name %}[name='{{ pat.name }}']{% endif %}
            {% endfor %}
          </li>
        {% endfor %}
      </ol>
      <p>The current URL, <code>{{ request_path|escape }}</code>, didn't match any of these.</p>
    {% else %}
      <p>{{ reason }}</p>
    {% endif %}
  </div>

  <div id="explanation">
    <p>
      You're seeing this error because you have <code>DEBUG = True</code> in
      your Django settings file. Change that to <code>False</code>, and Django
      will display a standard 404 page.
    </p>
  </div>
</body>
</html>
a  
<!DOCTYPE html>
<html lang="en"><head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE"><title>{{ title }}</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; }
    h2 { margin-bottom:.8em; }
    h2 span { font-size:80%; color:#666; font-weight:normal; }
    h3 { margin:1em 0 .5em 0; }
    h4 { margin:0 0 .5em 0; font-weight: normal; }
    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
    tbody td, tbody th { vertical-align:top; padding:2px 3px; }
    thead th {
      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
      font-weight:normal; font-size:11px; border:1px solid #ddd;
    }
    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
    #summary { background: #e0ebff; }
    #summary h2 { font-weight: normal; color: #666; }
    #explanation { background:#eee; }
    #instructions { background:#f6f6f6; }
    #summary table { border:none; background:transparent; }
  </style>
</head>

<body>
<div id="summary">
  <h1>{{ heading }}</h1>
  <h2>{{ subheading }}</h2>
</div>

<div id="instructions">
  <p>
    {{ instructions|safe }}
  </p>
</div>

<div id="explanation">
  <p>
    {{ explanation|safe }}
  </p>
</div>
</body></html>
)r7   )7
__future__r   r   r   r   Zdjango.confr   Zdjango.httpr   r   Zdjango.templater   r   r   Zdjango.template.defaultfiltersr	   r
   Zdjango.urlsr   r   Zdjango.utilsr   r   r   Zdjango.utils.datastructuresr   Zdjango.utils.encodingr   r   Zdjango.utils.module_loadingr   Zdjango.utils.translationr   r   r   compile
IGNORECASEr(   r*   objectr   r#   r6   rD   rE   rF   rG   rN   r:   r   r   r   r   r   r   r   r   r   r   <module>   sJ   
	
w Y7      3