Template Query Debug

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{% if debug %}
<div id="debug">
  <h2>Queries</h2>
  <p>
    {{ sql_queries|length }} Quer{{ sql_queries|pluralize:"y,ies" }}
    {% ifnotequal sql_queries|length 0 %}
    (<span style="cursor: pointer;" onclick="var s=document.getElementById('debugQueryTable').style;s.display=s.display=='none'?'':'none';this.innerHTML=this.innerHTML=='Show'?'Hide':'Show';">Show</span>)
    {% endifnotequal %}
  </p>
  <table id="debugQueryTable" style="display: none;">
    <col width="1"></col>
    <col></col>
    <col width="1"></col>
    <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">SQL</th>
      <th scope="col">Time</th>
    </tr>
    </thead>
    <tbody>
    {% for query in sql_queries %}<tr class="{% cycle odd,even %}">
      <td>{{ forloop.counter }}</td>
      <td>{{ query.sql|escape }}</td>
      <td>{{ query.time }}</td>
    </tr>{% endfor %}
    </tbody>
  </table>
</div>
{% endif %}

More like this

  1. Debug SQL Query in Template by dario.agliottone 1 year ago
  2. Output sql_queries in Firebug console when in debug mode by wojas 3 years, 2 months ago
  3. media_url context variable by marchino 6 years, 1 month ago
  4. Template context processor to make the settings.py values available in templates by tamizhgeek 2 years ago
  5. sorl.thumbnail processor: white background by izibi 4 years, 9 months ago

Comments

jdobbins (on March 11, 2007):

Thanks for the great snip! Wonderful tool for debugging 'slow pages'!

#

msgre (on March 14, 2007):

Cool!

I have little troubles with displaying long rows of queries. For example:

SELECT col1,col2,col3,col4 FROM table;

If you have a LOT of colX, they aren't wrapped in browser, and queries are bad to read.

So, I make little modification. I wrote custom filter, which replace character "," (comma) to ", " (comma and space). Now I could read debug SQL queries more comfortably.

My custom filter

def spaces_and_commas(value):
    from re import compile
    c = compile(",[^ ]")
    return c.sub(", ", value)

register.filter(spaces_and_commas)

Modification of your template (row 24)

<td>{{ query.sql|spaces_and_commas|escape }}</td>

Thank you for great snippet, insin.

#

cookiebearo (on May 28, 2007):

thank you both insin for the snippet and msgre for the filter, however, i noticed a bug with the filter

the expression:

c = compile(",[^ ]")

matches the first character after the comma (non-space), so after the sub call it is replacing that character with a space

i only caught this after realizing there was a missing " before each column

i swapped that out for:

c = compile(",(?! )")

and it seems to be working a-ok

#

PhiR (on September 12, 2007):

I'm using this snippets with the modifications in the comments but I've found useful to add this templatetags:

def slice_500(value):
    return value[:500]
register.filter(slice_500)

and to restrict the number of queries printed like this:

{% for query in sql_queries|splice_500 %}<tr class="{% cycle odd,even %}">

Some of my views are used for validation and run up to a few hundred thousand queries, which is a bit too much to print in a browser.

#

darek (on July 13, 2008):

Very helpful snippen. Tanks.

By the way... in current Django SVN version You don't have to set TEMPLATE_CONTEXT_PROCESSORS, it's on by default.

#

aaronfay (on September 24, 2008):

Brilliant works like a charm :)

af

#

ramikassab (on February 11, 2009):

Awesome snippet. Simple, clean, and effective...

#

analyzer (on March 7, 2010):

Hello,

I am new to django and i justed started to play around with django. I've copied this snippet to my base template but I can't see anything?

I checked every of the three steps mentioned above, the context processors are set by default and my ip is on INTERNAL_IPS. I don't understand what the third point means but I've added a request context to shortcut for rendering templates.

What can I do to get it work? Thanks for your help in advance and sorry for my bad english.

analyzer

#

Klaidi (on July 22, 2010):

nice !

#

RoslynRowe23 (on May 18, 2011):

Do you acknowledge that it's high time to receive the personal loans, which will realize your dreams.

#

RobertPattinson (on July 30, 2012):

I often find something like this lurking at the end of my base templates iPad 2 Cases

#

Latisse-UK (on October 3, 2012):

Very useful

Latisse UK

#

KStevens (on December 19, 2012):

Thanks for the snippet. It'll come in handy! Kevin's website.

#

4insure (on December 25, 2012):

Do you acknowledge that it's high time to receive the personal loans, which will realize your dreams. auto insurance rates

#

buzz (on January 10, 2013):

Oh yes thanks for this research. [HTML_REMOVED]coque iphone[HTML_REMOVED]

#

4insure (on January 26, 2013):

I often find something like this lurking at the end of my base templates james insurance blog

#

lukasparov (on February 13, 2013):

Very awesome snippets, clean and simple. Thanks. All Home Theater

#

m (on March 7, 2013):

I still can't get it to work. I'm using Django 1.3.1. Can someone post their settings? I had to add a number of options to TEMPLATE_CONTEXT_PROCESSORS to get my site to render correctly. ("django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.static", "django.contrib.messages.context_processors.messages")

I'm not clear where the template code goes. I copied it into my admin_base.html.

#

zxl777 (on March 26, 2013):

Ok,Just Test

#

siblek31 (on April 12, 2013):

Dengan definisi yang luas dari seni, tips cepat hamil [7] karya seni telah ada selama hampir sepanjang manusia: dari pra-sejarah seni awal untuk seni kontemporer, namun beberapa teori membatasi konsep untuk masyarakat Barat modern [9] Yang soal ulangan sd pertama dan luas. rasa seni adalah salah satu yang tetap dekat dengan tua Latin yang berarti, yang secara kasar diterjemahkan menjadi "keterampilan" atau "kerajinan." Beberapa contoh di mana ini berarti membuktikan sangat luas termasuk artefak, buatan, kecerdasan, seni medis, militer dan seni. Namun, belajar bahasa inggris ada banyak kegunaan sehari-hari lainnya kata, semua dengan beberapa hal yang etimologi.

#

siblek31 (on April 13, 2013):

Pendidikan kursus bahasa inggris murah Adat mengacu pada pencantuman pengetahuan adat, model, metode dan konten dalam sistem pendidikan formal dan non-formal. Seringkali dalam konteks pasca-kolonial, pengakuan tumbuh dan dimana lagi penggunaan metode pendidikan adat dapat menjadi respon terhadap erosi dan hilangnya pengetahuan adat dan bahasa melalui proses kolonialisme. Selain itu, dapat memungkinkan masyarakat kursus teknisi komputer adat untuk "merebut kembali dan merevaluasi bahasa dan budaya mereka, dan dengan demikian, meningkatkan keberhasilan pendidikan siswa pribumi." [9]

#

lukasparov (on April 28, 2013):

Exactly what I want! Thanks for the great snip! Wonderful tool for debugging 'slow pages'!

SuplemenFitness.net

#

epicroom77 (on May 14, 2013):

Nice Blog definitely, you will find a many approaches after visiting your post.This is good to hear that finally, they come up with this innovation.El&Font font [HTML_REMOVED]Jual Obat Kuat[HTML_REMOVED] situation as well as the environment ,[HTML_REMOVED]Obat diabetes[HTML_REMOVED] but not so that we endure it , to live actively. John, I've just back from

#

(Forgotten your password?)