从django模板调用python“DIR”函数,还是php print_r等效?

时间:2012-01-15 18:28:43

标签: django django-templates

是否有人知道用于检查模板中元素的现有库?

目前我通常最终会在视图中执行此操作:

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并引发错误,如果错误则不会被捕获
  • 将输出包装在< pre>

如果必须,我会写它,但希望其他人已经这样做了。

3 个答案:

答案 0 :(得分: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" %}

答案 1 :(得分:3)

在django中,有比print_r好多了:

  • 如果模板崩溃,您可以访问debig模板中的所有变量。您可以通过设置{%url fjkdslmjfdklmfjlsmqk%}强制执行此操作 它就像所有变量上的超级print_r一样。

  • 你可以安装django(extensions and werkzeug,这样你就可以用runserver_plus替换runserver并获得与我们讨论过的页面相同的页面,但是在堆栈跟踪的每一行都嵌入了交互式Python shell

  • 您可以安装django_template_repl,它可以让您在模板中的任何位置以python shell或模板shell的形式启动调试器。

  • 您可以安装django-debug-toolbar以获取print_r样式显示,以及除了您以外任何人都看不到的JS侧栏中的更多内容。

答案 2 :(得分:0)

不确定它是您要找的,但django有默认模板过滤器pprint。看起来这是print_r替换者。