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

Ted*_*Ted 4 django django-templates

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

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

show_me = dir(the_deets_on_this_object)
raise ValueError()
Run Code Online (Sandbox Code Playgroud)

然后我可以在调试器堆栈跟踪中检查show_me的值.

但是,这真的很难看.我希望能够在模板中进行此检查,就像在php中使用print_r一样

{% load development_show_me %}
{{the_deets_on_this_object|show_them_to_me}}
Run Code Online (Sandbox Code Playgroud)

我知道这在django标准模板库中不存在,但我希望有人已经编写了这个模板过滤器,所以我可以愉快地使用它.

奖金行为:

  • 检查settings.DEBUG并引发错误,如果错误则不会被捕获
  • 将输出包装在<pre>中

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

Ted*_*Ted 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 ""
Run Code Online (Sandbox Code Playgroud)

用法:

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

{% template_dir my_object "I'm looking at my_object" %}
Run Code Online (Sandbox Code Playgroud)

  • 检查settings.DEBUG,以防万一你在去生产之前忘记删除`{%template_dir%}`. (2认同)

e-s*_*tis 5

在 django 中,有比以下更好的东西print_r

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

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

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

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