Ticket #4786: views_debug_py.4.diff

File views_debug_py.4.diff, 3.7 KB (added by Thomas Güttler, 16 years ago)
  • django/views/debug.py

     
    88from django.utils.html import escape
    99from django.http import HttpResponse, HttpResponseServerError, HttpResponseNotFound
    1010from django.utils.encoding import smart_unicode, smart_str
     11from django.db.models.loading import get_apps
    1112
    1213HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST')
    1314
     
    186187        post_context = [line.strip('\n') for line in source[lineno+1:upper_bound]]
    187188
    188189        return lower_bound, pre_context, context_line, post_context
     190       
     191    def _is_installed_app_file(self, app_module_paths, filename):
     192        for path in app_module_paths:
     193            if filename.startswith(path):
     194                return True
     195        return False
    189196
    190197    def get_traceback_frames(self):
    191198        frames = []
    192199        tb = self.tb
     200        app_module_paths=[]
     201        for mod in get_apps():
     202            if mod.__name__.startswith('django.'):
     203                continue
     204            dirname=os.path.dirname(os.path.normpath(mod.__file__))
     205            if os.path.basename(dirname)=='models':
     206                # models directory instead of app/models.py
     207                dirname=os.path.dirname(dirname)
     208            app_module_paths.append(dirname)
     209       
    193210        while tb is not None:
    194211            # support for __traceback_hide__ which is used by a few libraries
    195212            # to hide internal frames.
     
    207224                    'tb': tb,
    208225                    'filename': filename,
    209226                    'function': function,
     227                    'app_code': self._is_installed_app_file(app_module_paths, filename),
    210228                    'lineno': lineno + 1,
    211229                    'vars': tb.tb_frame.f_locals.items(),
    212230                    'id': id(tb),
     
    313331    div.context ol.context-line li span { float: right; }
    314332    div.commands { margin-left: 40px; }
    315333    div.commands a { color:black; text-decoration:none; }
     334    .app-code { font-weight: bold; }
    316335    #summary { background: #ffc; }
    317336    #summary h2 { font-weight: normal; color: #666; }
    318337    #explanation { background:#eee; }
     
    477496    <ul class="traceback">
    478497      {% for frame in frames %}
    479498        <li class="frame">
    480           <code>{{ frame.filename|escape }}</code> in <code>{{ frame.function|escape }}</code>
     499          <code{% if frame.app_code %} class="app-code" {% endif %}>{{ frame.filename|escape }}</code> in <code>{{ frame.function|escape }}</code>
    481500
    482501          {% if frame.context_line %}
    483502            <div class="context" id="c{{ frame.id }}">
    484503              {% if frame.pre_context %}
    485504                <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 }}')">{{ line|escape }}</li>{% endfor %}</ol>
    486505              {% endif %}
    487               <ol start="{{ frame.lineno }}" class="context-line"><li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')">{{ frame.context_line|escape }} <span>...</span></li></ol>
     506              <ol start="{{ frame.lineno }}" class="context-line {% if frame.app_code %} app-code {% endif %}"><li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')">{{ frame.context_line|escape }} <span>...</span></li></ol>
    488507              {% if frame.post_context %}
    489508                <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 }}')">{{ line|escape }}</li>{% endfor %}</ol>
    490509              {% endif %}
Back to Top