2012-01-15 79 views
2

有沒有人知道現有的庫檢查模板中的元素?從django模板調用python「DIR」函數,或php的print_r等效?

目前,我通常最終會在視圖中這樣做:

show_me = dir(the_deets_on_this_object) 
raise ValueError() 

然後我可以檢查在調試器堆棧跟蹤show_me的價值。

但是,這真的很醜。我很想能夠做到在模板這次視察,就像在PHP做用的print_r

{% load development_show_me %} 
{{the_deets_on_this_object|show_them_to_me}} 

我知道這不Django的標準模板庫中存在,但我希望有人已經寫了這個模板過濾器,所以我可以愉快地使用它。

獎金的行爲:

  • 支票settings.DEBUG並引發未捕獲的錯誤,如果它是假的
  • 包裹輸出<預>

我會如果需要的話可以寫下來,但希望別人已經這樣做了。

回答

2

在Django有比print_r好得多:

  • 如果模板崩潰,您可以訪問所有的變量在debig模板

    。您可以通過設置強制執行此設置{%url fjkdslmjfdklmfjlsmqk%} 這就像所有變量上的超級print_r。

  • 可以安裝django(extensions and werkzeug,這樣你可以用runserver_plus替代的runserver並獲得相同的頁面,因爲我們談論的一個,但在堆棧跟蹤的每一行內嵌交互式Python外殼

  • 可以安裝django_template_repl,它可以讓你在模板中的任何地方以python shell或模板shell的形式啓動調試器。

  • 您可以安裝django-debug-toolbar以獲得print_r樣式顯示,以及更多JS側欄中除了您以外的人看不到的內容。

7

它寫的功能比編寫問題詢問是否有人知道它是否存在更快。人物。

#myproject/tempates/templatetags/helper_tags.py 
from django.template import Library 
from django.conf import settings 
register = Library() 

@register.simple_tag 
def template_dir(this_object, its_name=""): 
    if settings.DEBUG: 
     output = dir(this_object) 
     return "<pre>" + str(its_name) + " " + str(output) + "</pre>" 
    return "" 

用法:

{% load helper_tags %} 
{% template_dir field.field "field.field" %} 

{% template_dir my_object "I'm looking at my_object" %} 
+2

檢查settings.DEBUG,以防在生產前忘記刪除'{%template_dir%}'。 – cji 2012-01-15 23:17:26

0

不知道是不是你要找的,但Django的有默認模板過濾pprint。看起來這是print_r替代品。