如何在 django 模板中插入断点?

Posted

技术标签:

【中文标题】如何在 django 模板中插入断点?【英文标题】:How to insert breakpoint in django template? 【发布时间】:2016-11-25 12:45:44 【问题描述】:

如何在 django 模板中插入pdb.set_trace()?或者也许在模板内运行一些其他调试。

【问题讨论】:

您可以结帐% debug % 这个方法打印所有传递给模板的变量。我们有什么方法可以在常规 python 代码中获得与pdb.set_trace() 相同的行为? 【参考方案1】:

这是我制作的一个小模板标签,可让您检查模板中任何给定点的上下文:

from django import template

register = template.Library()


@register.simple_tag(takes_context=True)
def set_breakpoint(context, *args):
    """
    Set breakpoints in the template for easy examination of the context,
    or any variables of your choice.

    Usage:
        % load breakpoint %
        % set_breakpoint %
              - or -
        % set_breakpoint your_variable your_other_variable %

    - The context is always accessible in the pdb console as a dict 'context'.

    - Additional variables can be accessed as vars[i] in the pdb console.
      - e.g. in the example above, your_variable will called vars[0] in the
             console, your_other_variable is vars[1]
    """

    vars = [arg for arg in locals()['args']]  # noqa F841
    breakpoint()

将此代码保存在[your_project]/[your_app]/templatetags/your_template_tag.py 中。 (templatetags 文件夹应与[your_app]templates 文件夹位于同一目录中。)

现在,重新启动服务器。 (不要忘记这部分!直到你重新启动服务器,模板标签才会加载!)

您现在可以通过将以下代码放入您希望调试器运行的模板中来调用模板标签:

% load your_template_tag %
% set_breakpoint %
       - or -
% set_breakpoint some_variable %

瞧! Django 的服务器现在将为您显示一个 pdb shell,您可以在其中检查模板的整个上下文。

显然,这仅供开发使用。不要在生产环境中运行它,也不要在代码中留下断点。

【讨论】:

【参考方案2】:

PyCharm 专业版支持 Django 模板的图形化调试。有关如何执行此操作的更多信息,请点击此处:

https://www.jetbrains.com/help/pycharm/2016.1/debugging-django-templates.html

PyCharm 的调试器非常非常好。它几乎是最好的 Python IDE。

免责声明:我是一个满意的客户,但没有其他既得利益。

【讨论】:

以上是关于如何在 django 模板中插入断点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在django创建模板中创建对象时自动插入当前用户?

在 django 模板中单击按钮后如何填充表格?

如何定义基本的通用代码块并将它们插入到 Django 的其他模板中?

如何在 django 模板中迭代字典的列表值

如何在 django 中为模板应用背景图像

如何在 Jinja 中实现类似 Django 的标签