Anpassungen für das Hosting bei Djangoeurope und damit verbundenen Versionen Django 1.8 und Python 2.7

This commit is contained in:
Christian Berg
2015-08-05 18:55:48 +02:00
committed by Christian Berg
parent cb4b15b3c6
commit b96b485b61
1354 changed files with 7289 additions and 6858 deletions

View File

@@ -0,0 +1,69 @@
{% load i18n %}
<h4>{% trans "Summary" %}</h4>
<table>
<thead>
<tr>
<th>{% trans "Total calls" %}</th>
<th>{% trans "Total time" %}</th>
<th>{% trans "Cache hits" %}</th>
<th>{% trans "Cache misses" %}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ total_calls }}</td>
<td>{{ total_time }} ms</td>
<td>{{ hits }}</td>
<td>{{ misses }}</td>
</tr>
</tbody>
</table>
<h4>{% trans "Commands" %}</h4>
<table>
<thead>
<tr>
{% for name in counts.keys %}
<th>{{ name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
<tr>
{% for value in counts.values %}
<td>{{ value }}</td>
{% endfor %}
</tr>
</tbody>
</table>
{% if calls %}
<h4>{% trans "Calls" %}</h4>
<table>
<thead>
<tr>
<th colspan="2">{% trans "Time (ms)" %}</th>
<th>{% trans "Type" %}</th>
<th>{% trans "Arguments" %}</th>
<th>{% trans "Keyword arguments" %}</th>
<th>{% trans "Backend" %}</th>
</tr>
</thead>
<tbody>
{% for call in calls %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}" id="cacheMain_{{ forloop.counter }}">
<td class="djdt-toggle">
<a class="djToggleSwitch" data-toggle-name="cacheMain" data-toggle-id="{{ forloop.counter }}" data-toggle-open="+" data-toggle-close="-" href>+</a>
</td>
<td>{{ call.time|floatformat:"4" }}</td>
<td>{{ call.name|escape }}</td>
<td>{{ call.args|escape }}</td>
<td>{{ call.kwargs|escape }}</td>
<td>{{ call.backend }}</td>
</tr>
<tr class="djUnselected djDebugHoverable {% cycle 'djDebugOdd' 'djDebugEven' %} djToggleDetails_{{ forloop.counter }}" id="cacheDetails_{{ forloop.counter }}">
<td colspan="1"></td>
<td colspan="5"><pre class="djdt-stack">{{ call.trace }}</pre></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}

View File

@@ -0,0 +1,60 @@
{% load i18n %}
<h4>{% trans "Request headers" %}</h4>
<table>
<thead>
<tr>
<th>{% trans "Key" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in request_headers.items %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ key|escape }}</td>
<td>{{ value|escape }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h4>{% trans "Response headers" %}</h4>
<table>
<thead>
<tr>
<th>{% trans "Key" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in response_headers.items %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ key|escape }}</td>
<td>{{ value|escape }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h4>{% trans "WSGI environ" %}</h4>
<p>{% trans "Since the WSGI environ inherits the environment of the server, only a significant subset is shown below." %}</p>
<table>
<thead>
<tr>
<th>{% trans "Key" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in environ.items %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ key|escape }}</td>
<td>{{ value|escape }}</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,28 @@
{% load i18n %}
{% if records %}
<table>
<thead>
<tr>
<th>{% trans "Level" %}</th>
<th>{% trans "Time" %}</th>
<th>{% trans "Channel" %}</th>
<th>{% trans "Message" %}</th>
<th>{% trans "Location" %}</th>
</tr>
</thead>
<tbody>
{% for record in records %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ record.level }}</td>
<td>{{ record.time|date:"h:i:s m/d/Y" }}</td>
<td>{{ record.channel|default:"-" }}</td>
<td>{{ record.message|linebreaksbr }}</td>
<td>{{ record.file }}:{{ record.line }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "No messages logged" %}.</p>
{% endif %}

View File

@@ -0,0 +1,36 @@
{% load i18n %}{% load static from staticfiles %}
<table width="100%">
<thead>
<tr>
<th>{% trans "Call" %}</th>
<th>{% trans "CumTime" %}</th>
<th>{% trans "Per" %}</th>
<th>{% trans "TotTime" %}</th>
<th>{% trans "Per" %}</th>
<th>{% trans "Count" %}</th>
</tr>
</thead>
<tbody>
{% for call in func_list %}
<tr class="djDebugProfileRow{% for parent_id in call.parent_ids %} djToggleDetails_{{ parent_id }}{% endfor %}" depth="{{ call.depth }}">
<td>
<div data-padding-left="{{ call.indent }}px">
{% if call.has_subfuncs %}
<a class="djProfileToggleDetails djToggleSwitch" data-toggle-id="{{ call.id }}" data-toggle-open="+" data-toggle-close="-" href>-</a>
{% else %}
<span class="djNoToggleSwitch"></span>
{% endif %}
<span class="djdt-stack">{{ call.func_std_string }}</span>
</div>
</td>
<td>{{ call.cumtime|floatformat:3 }}</td>
<td>{{ call.cumtime_per_call|floatformat:3 }}</td>
<td>{{ call.tottime|floatformat:3 }}</td>
<td>{{ call.tottime_per_call|floatformat:3 }}</td>
<td>{{ call.count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<script src="{% static 'debug_toolbar/js/toolbar.profiling.js' %}"></script>

View File

@@ -0,0 +1,124 @@
{% load i18n %}
<h4>{% trans "View information" %}</h4>
<table>
<thead>
<tr>
<th>{% trans "View function" %}</th>
<th>{% trans "Arguments" %}</th>
<th>{% trans "Keyword arguments" %}</th>
<th>{% trans "URL name" %}</th>
</tr>
</thead>
<tbody>
<tr>
<td class="djDebugOdd"><code>{{ view_func }}</code></td>
<td class="djDebugEven"><code>{{ view_args|pprint }}</code></td>
<td class="djDebugOdd"><code>{{ view_kwargs|pprint }}</code></td>
<td class="djDebugEven"><code>{{ view_urlname }}</code></td>
</tr>
</tbody>
</table>
{% if cookies %}
<h4>{% trans "Cookies" %}</h4>
<table>
<colgroup>
<col class="djdt-width-20"/>
<col/>
</colgroup>
<thead>
<tr>
<th>{% trans "Variable" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in cookies %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td><code>{{ key|pprint }}</code></td>
<td><code>{{ value|pprint }}</code></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h4>{% trans "No cookies" %}</h4>
{% endif %}
{% if session %}
<h4>{% trans "Session data" %}</h4>
<table>
<colgroup>
<col class="djdt-width-20"/>
<col/>
</colgroup>
<thead>
<tr>
<th>{% trans "Variable" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in session %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td><code>{{ key|pprint }}</code></td>
<td><code>{{ value|pprint }}</code></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h4>{% trans "No session data" %}</h4>
{% endif %}
{% if get %}
<h4>{% trans "GET data" %}</h4>
<table>
<colgroup>
<col class="djdt-width-20"/>
<col/>
</colgroup>
<thead>
<tr>
<th>{% trans "Variable" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in get %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td><code>{{ key|pprint }}</code></td>
<td><code>{{ value|pprint }}</code></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h4>{% trans "No GET data" %}</h4>
{% endif %}
{% if post %}
<h4>{% trans "POST data" %}</h4>
<table>
<colgroup>
<col class="djdt-width-20"/>
<col/>
</colgroup>
<tr>
<th>{% trans "Variable" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in post %}
<tr class="{% cycle 'row1' 'row2' %}">
<td><code>{{ key|pprint }}</code></td>
<td><code>{{ value|pprint }}</code></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h4>{% trans "No POST data" %}</h4>
{% endif %}

View File

@@ -0,0 +1,17 @@
{% load i18n %}
<table>
<thead>
<tr>
<th>{% trans "Setting" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for name, value in settings.items %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ name }}</td>
<td><code>{{ value|pprint }}</code></td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,19 @@
{% load i18n %}
<table>
<thead>
<tr>
<th>{% trans "Signal" %}</th>
<th>{% trans "Providing" %}</th>
<th>{% trans "Receivers" %}</th>
</tr>
</thead>
<tbody>
{% for name, signal, receivers in signals %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ name|escape }}</td>
<td>{{ signal.providing_args|join:", " }}</td>
<td>{{ receivers|join:", " }}</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,102 @@
{% load i18n l10n %}{% load static from staticfiles %}
<div class="djdt-clearfix">
<ul class="djdt-stats">
{% for alias, info in databases %}
<li>
<strong class="djdt-label"><span data-background-color="rgb({{ info.rgb_color|join:", " }})" class="djdt-color">&#160;</span> {{ alias }}</strong>
<span class="djdt-info">{{ info.time_spent|floatformat:"2" }} ms ({% blocktrans count info.num_queries as num %}{{ num }} query{% plural %}{{ num }} queries{% endblocktrans %}
{% if info.duplicate_count %}
{% blocktrans with dupes=info.duplicate_count %}including {{ dupes }} duplicates{% endblocktrans %}
{% endif %})</span>
</li>
{% endfor %}
</ul>
</div>
{% if queries %}
<table>
<thead>
<tr>
<th class="djdt-color">&#160;</th>
<th class="query" colspan="2">{% trans "Query" %}</th>
<th class="timeline">{% trans "Timeline" %}</th>
<th class="djdt-time">{% trans "Time (ms)" %}</th>
<th class="djdt-actions">{% trans "Action" %}</th>
</tr>
</thead>
<tbody>
{% for query in queries %}
<tr class="djDebugHoverable {% cycle 'djDebugOdd' 'djDebugEven' %}{% if query.is_slow %} djDebugRowWarning{% endif %}{% if query.starts_trans %} djDebugStartTransaction{% endif %}{% if query.ends_trans %} djDebugEndTransaction{% endif %}{% if query.in_trans %} djDebugInTransaction{% endif %}" id="sqlMain_{{ forloop.counter }}">
<td class="djdt-color"><span data-background-color="rgb({{ query.rgb_color|join:", " }})">&#160;</span></td>
<td class="djdt-toggle">
<a class="djToggleSwitch" data-toggle-name="sqlMain" data-toggle-id="{{ forloop.counter }}" data-toggle-open="+" data-toggle-close="-" href>+</a>
</td>
<td class="query">
<div class="djDebugSqlWrap">
<div class="djDebugSql">{{ query.sql|safe }}</div>
</div>
{% if query.duplicate_count %}
<strong>{% blocktrans with dupes=query.duplicate_count %}Duplicated {{ dupes }} times.{% endblocktrans %}
</strong>
{% endif %}
</td>
<td class="timeline">
<div class="djDebugTimeline"><div class="djDebugLineChart{% if query.is_slow %} djDebugLineChartWarning{% endif %}" data-left="{{ query.start_offset|unlocalize }}%"><strong data-width="{{ query.width_ratio_relative|unlocalize }}%" data-background-color"{{ query.trace_color }}">{{ query.width_ratio }}%</strong></div></div>
</td>
<td class="djdt-time">
{{ query.duration|floatformat:"2" }}
</td>
<td class="djdt-actions">
{% if query.params %}
{% if query.is_select %}
<form method="post">
{{ query.form }}
<button formaction="{% url 'djdt:sql_select' %}" class="remoteCall">Sel</button>
<button formaction="{% url 'djdt:sql_explain' %}" class="remoteCall">Expl</button>
{% if query.vendor == 'mysql' %}
<button formaction="{% url 'djdt:sql_profile' %}" class="remoteCall">Prof</button>
{% endif %}
</form>
{% endif %}
{% endif %}
</td>
</tr>
<tr class="djUnselected djDebugHoverable {% cycle 'djDebugOdd' 'djDebugEven' %}{% if query.is_slow %} djDebugRowWarning{% endif %} djToggleDetails_{{ forloop.counter }}" id="sqlDetails_{{ forloop.counter }}">
<td colspan="2"></td>
<td colspan="4">
<div class="djSQLDetailsDiv">
<p><strong>{% trans "Connection:" %}</strong> {{ query.alias }}</p>
{% if query.iso_level %}
<p><strong>{% trans "Isolation level:" %}</strong> {{ query.iso_level }}</p>
{% endif %}
{% if query.trans_status %}
<p><strong>{% trans "Transaction status:" %}</strong> {{ query.trans_status }}</p>
{% endif %}
{% if query.stacktrace %}
<pre class="djdt-stack">{{ query.stacktrace }}</pre>
{% endif %}
{% if query.template_info %}
<table>
{% for line in query.template_info.context %}
<tr>
<td>{{ line.num }}</td>
<td><code {% if line.highlight %}class="djdt-highlighted"{% endif %}>{{ line.content }}</code></td>
</tr>
{% endfor %}
</table>
<p><strong>{{ query.template_info.name|default:_("(unknown)") }}</strong></p>
{% endif %}
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "No SQL queries were recorded during this request." %}</p>
{% endif %}
<script src="{% static 'debug_toolbar/js/toolbar.sql.js' %}"></script>

View File

@@ -0,0 +1,37 @@
{% load i18n %}{% load static from staticfiles %}
<div class="djDebugPanelTitle">
<a class="djDebugClose djDebugBack" href=""></a>
<h3>{% trans "SQL explained" %}</h3>
</div>
<div class="djDebugPanelContent">
<div class="djdt-scroll">
<dl>
<dt>{% trans "Executed SQL" %}</dt>
<dd>{{ sql|safe }}</dd>
<dt>{% trans "Time" %}</dt>
<dd>{{ duration }} ms</dd>
<dt>{% trans "Database" %}</dt>
<dd>{{ alias }}</dd>
</dl>
<table class="djSqlExplain">
<thead>
<tr>
{% for h in headers %}
<th>{{ h|upper }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in result %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
{% for column in row %}
<td>{{ column|escape }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<script src="{% static 'debug_toolbar/js/toolbar.sql.js' %}"></script>

View File

@@ -0,0 +1,44 @@
{% load i18n %}{% load static from staticfiles %}
<div class="djDebugPanelTitle">
<a class="djDebugClose djDebugBack" href=""></a>
<h3>{% trans "SQL profiled" %}</h3>
</div>
<div class="djDebugPanelContent">
<div class="djdt-scroll">
{% if result %}
<dl>
<dt>{% trans "Executed SQL" %}</dt>
<dd>{{ sql|safe }}</dd>
<dt>{% trans "Time" %}</dt>
<dd>{{ duration }} ms</dd>
<dt>{% trans "Database" %}</dt>
<dd>{{ alias }}</dd>
</dl>
<table class="djSqlProfile">
<thead>
<tr>
{% for h in headers %}
<th>{{ h|upper }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in result %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
{% for column in row %}
<td>{{ column|escape }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<dl>
<dt>{% trans "Error" %}</dt>
<dd>{{ result_error }}</dd>
</dl>
{% endif %}
</div>
</div>
<script src="{% static 'debug_toolbar/js/toolbar.sql.js' %}"></script>

View File

@@ -0,0 +1,41 @@
{% load i18n %}{% load static from staticfiles %}
<div class="djDebugPanelTitle">
<a class="djDebugClose djDebugBack" href=""></a>
<h3>{% trans "SQL selected" %}</h3>
</div>
<div class="djDebugPanelContent">
<div class="djdt-scroll">
<dl>
<dt>{% trans "Executed SQL" %}</dt>
<dd>{{ sql|safe }}</dd>
<dt>{% trans "Time" %}</dt>
<dd>{{ duration }} ms</dd>
<dt>{% trans "Database" %}</dt>
<dd>{{ alias }}</dd>
</dl>
{% if result %}
<table class="djSqlSelect">
<thead>
<tr>
{% for h in headers %}
<th>{{ h|upper }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in result %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
{% for column in row %}
<td>{{ column|escape }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "Empty set" %}</p>
{% endif %}
</div>
</div>
<script src="{% static 'debug_toolbar/js/toolbar.sql.js' %}"></script>

View File

@@ -0,0 +1,57 @@
{% load i18n %}
{% load static from staticfiles%}
<h4>{% blocktrans count staticfiles_dirs|length as dirs_count %}Static file path{% plural %}Static file paths{% endblocktrans %}</h4>
{% if staticfiles_dirs %}
<ol>
{% for prefix, staticfiles_dir in staticfiles_dirs %}
<li>{{ staticfiles_dir }}{% if prefix %} {% blocktrans %}(prefix {{ prefix }}){% endblocktrans %}{% endif %}</li>
{% endfor %}
</ol>
{% else %}
<p>{% trans "None" %}</p>
{% endif %}
<h4>{% blocktrans count staticfiles_apps|length as apps_count %}Static file app{% plural %}Static file apps{% endblocktrans %}</h4>
{% if staticfiles_apps %}
<ol>
{% for static_app in staticfiles_apps %}
<li>{{ static_app }}</li>
{% endfor %}
</ol>
{% else %}
<p>{% trans "None" %}</p>
{% endif %}
<h4>{% blocktrans count staticfiles|length as staticfiles_count %}Static file{% plural %}Static files{% endblocktrans %}</h4>
{% if staticfiles %}
<dl>
{% for staticfile in staticfiles %}
<dt><strong><a class="toggleTemplate" href="{{ staticfile.url }}">{{ staticfile }}</a></strong></dt>
<dd><samp>{{ staticfile.real_path }}</samp></dd>
{% endfor %}
</dl>
{% else %}
<p>{% trans "None" %}</p>
{% endif %}
{% for finder, payload in staticfiles_finders.items %}
<h4>{{ finder }} ({% blocktrans count payload|length as payload_count %}{{ payload_count }} file{% plural %}{{ payload_count }} files{% endblocktrans %})</h4>
<table>
<thead>
<tr>
<th>{% trans 'Path' %}</th>
<th>{% trans 'Location' %}</th>
</tr>
</thead>
<tbody>
{% for path, real_path in payload %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ path }}</td>
<td>{{ real_path }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}

View File

@@ -0,0 +1,14 @@
{% load i18n %}
<div class="djDebugPanelTitle">
<a class="djDebugClose djDebugBack" href=""></a>
<h3>{% trans "Template source:" %} <code>{{ template_name }}</code></h3>
</div>
<div class="djDebugPanelContent">
<div class="djdt-scroll">
{% if not source.pygmentized %}
<code>{{ source }}</code>
{% else %}
{{ source }}
{% endif %}
</div>
</div>

View File

@@ -0,0 +1,46 @@
{% load i18n %}{% load static from staticfiles %}
<h4>{% blocktrans count template_dirs|length as template_count %}Template path{% plural %}Template paths{% endblocktrans %}</h4>
{% if template_dirs %}
<ol>
{% for template in template_dirs %}
<li>{{ template }}</li>
{% endfor %}
</ol>
{% else %}
<p>{% trans "None" %}</p>
{% endif %}
<h4>{% blocktrans count templates|length as template_count %}Template{% plural %}Templates{% endblocktrans %}</h4>
{% if templates %}
<dl>
{% for template in templates %}
<dt><strong><a class="remoteCall toggleTemplate" href="{% url 'djdt:template_source' %}?template={{ template.template.name }}">{{ template.template.name|addslashes }}</a></strong></dt>
<dd><samp>{{ template.template.origin_name|addslashes }}</samp></dd>
{% if template.context %}
<dd>
<div class="djTemplateShowContextDiv"><a class="djTemplateShowContext"><span class="toggleArrow">&#x25B6;</span> {% trans "Toggle context" %}</a></div>
<div class="djTemplateHideContextDiv" hidden="hidden"><code>{{ template.context }}</code></div>
</dd>
{% endif %}
{% endfor %}
</dl>
{% else %}
<p>{% trans "None" %}</p>
{% endif %}
<h4>{% blocktrans count context_processors|length as context_processors_count %}Context processor{% plural %}Context processors{% endblocktrans %}</h4>
{% if context_processors %}
<dl>
{% for key, value in context_processors.items %}
<dt><strong>{{ key|escape }}</strong></dt>
<dd>
<div class="djTemplateShowContextDiv"><a class="djTemplateShowContext"><span class="toggleArrow">&#x25B6;</span> {% trans "Toggle context" %}</a></div>
<div class="djTemplateHideContextDiv" hidden="hidden"><code>{{ value|escape }}</code></div>
</dd>
{% endfor %}
</dl>
{% else %}
<p>{% trans "None" %}</p>
{% endif %}
<script src="{% static 'debug_toolbar/js/toolbar.template.js' %}"></script>

View File

@@ -0,0 +1,44 @@
{% load i18n %}{% load static from staticfiles %}
<h4>{% trans "Resource usage" %}</h4>
<table>
<colgroup>
<col class="djdt-width-20"/>
<col/>
</colgroup>
<thead>
<tr>
<th>{% trans "Resource" %}</th>
<th>{% trans "Value" %}</th>
</tr>
</thead>
<tbody>
{% for key, value in rows %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ key|escape }}</td>
<td>{{ value|escape }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<!-- This hidden div is populated and displayed by code in toolbar.timer.js -->
<div id="djDebugBrowserTiming" hidden="hidden">
<h4>{% trans "Browser timing" %}</h4>
<table>
<colgroup>
<col class="djdt-width-20"/>
<col class="djdt-width-60"/>
<col class="djdt-width-20"/>
</colgroup>
<thead>
<tr>
<th>{% trans "Timing attribute" %}</th>
<th class="timeline">{% trans "Timeline" %}</th>
<th class="djdt-time">{% trans "Milliseconds since navigation start (+length)" %}</th>
</tr>
</thead>
<tbody id="djDebugBrowserTimingTableBody">
</tbody>
</table>
</div>
<script src="{% static 'debug_toolbar/js/toolbar.timer.js' %}"></script>

View File

@@ -0,0 +1,17 @@
{% load i18n %}
<table>
<thead>
<tr>
<th>{% trans "Name" %}</th>
<th>{% trans "Version" %}</th>
</tr>
</thead>
<tbody>
{% for package, version in versions.items %}
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
<td>{{ package }}</td>
<td>{{ version }}</td>
</tr>
{% endfor %}
</tbody>
</table>