【问题标题】:How do I get all the variables defined in a Django template?如何获取 Django 模板中定义的所有变量?
【发布时间】:2011-01-05 05:33:43
【问题描述】:

我是 Django 新手,我想知道是否有一种方法可以转储模板中可用的所有变量以进行调试。在 Python 中,我可能会使用 locals() 之类的东西,是否有与默认模板引擎等效的东西?

注意:假设我无权访问此问题的视图。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    Ned 和 blaine 的答案都很好,但如果你真的想达到你所要求的,可以使用模板标签:

    {% debug %}

    Builtins:debug

    context_processor.debug 中的更多信息包括:

    如果启用此处理器,每个 RequestContext 都将包含 debug 和 sql_queries 变量——但前提是你的 DEBUG 设置 设置为 True 和请求的 IP 地址 (request.META['REMOTE_ADDR']) 处于INTERNAL_IPS设置

    与 Peter G 的建议类似,我经常在具有 display:none 的页面末尾使用 <div id="django-debug"><pre>{% debug|escape %}</pre></div> 块,但我可以检查以进行调试。

    【讨论】:

    • 为了使其更具可读性,可以使用:
      {% filter force_escape %}{% debug %}{% endfilter %}
    • @PeterG 确实,这几乎就是我自己所做的!有时将其放入底部页面元素等中。
    【解决方案2】:

    您可能还对django-template-repl 感兴趣,这是一个用于 Django 模板语言的 readline shell。您可以将{% load repl %}{% pdb %} 拖放到您的模板中并获得一个交互式调试器。

    【讨论】:

      【解决方案3】:

      虽然其他成员提供的两种解决方案可以让您访问模板中的所有变量,但我认为必须有一种更简单的方法(顺便说一句,感谢您的回复)。

      这是查找传递给模板的所有变量的简单方法。

      1. 在要检查的模板中引入错误。添加一个不存在的标签是可行的。
      2. 确保调试已打开。
      3. 浏览到加载模板的页面。 (您的网站必须通过 runserver 或其他方式运行)。

      模板的调试输出包含一个名为“TraceBack”的部分。找到您的视图的回溯(在我的例子中从顶部开始的第二个条目),然后单击“Local vars”。这一切都在那里。

      【讨论】:

      • 虽然这种方法适用于一次性调试,但我发现我问的问题是“此模板中有哪些变量可用?”值得努力安装@ned-batchelder 提到的 django-debug-toolbar。顺便说一句,安装起来并不费力(安装包,适当更新settings.py),默认配置适合大多数场景。
      【解决方案4】:

      安装Django Debug Toolbar。它为您提供所有这些以及更多。

      【讨论】:

        猜你喜欢
        • 2018-03-19
        • 1970-01-01
        • 2018-10-13
        • 1970-01-01
        • 2014-08-08
        • 2012-01-05
        • 1970-01-01
        • 2017-09-14
        • 2018-05-07
        相关资源
        最近更新 更多