如何使用Visual Studio Code调试Django

29

我刚开始学习Django开发,之前从事过桌面和移动应用的开发,使用的是Xcode和相关IDE。

现在我需要使用Django,想知道是否有一种高效的方法可以使用Visual Studio Code(或Atom)进行调试。

任何与Django IDE相关的帮助也将非常有用。

5个回答

58

对于VSCode(完全公开,我是VSCode开发人员之一),请尝试安装Python扩展程序开始。

此文档涵盖了如何调试Django。应该会有一个包含的调试配置或者您可以将自己的配置添加到launch.json文件中:

{
    "name": "Django",
    "type": "python",
    "request": "launch",
    "stopOnEntry": false,
    "pythonPath": "${config.python.pythonPath}",
    "program": "${workspaceRoot}/manage.py",
    "args": [
        "runserver",
        "--no-color",
        "--noreload"
    ],
    "debugOptions": [
        "WaitOnAbnormalExit",
        "WaitOnNormalExit",
        "RedirectOutput",
        "DjangoDebugging"
    ]
}

Python扩展还提供许多其他功能,您可能会发现这些功能很有用。


非常感谢您的帮助 :) - DEADBEEF
2
我发现Debug Console无法打印Django日志。我想到这是因为VSCode不支持彩色日志,所以我认为在这里也需要--no-color参数。 - realhu
2
我可能做错了,但是我从中得到了多个错误,首先是VS Code抱怨无法识别配对的"type":"python";完全透明地说,我已经安装并运行了MagicPythonPythonPython Extension PackPython for VSCode - Michael Ward
2
有没有自动重新加载的方法?看起来VSCode不支持,但每次更改后手动重启服务器很麻烦。我认为你可以设置一个“附加”调试配置,以便连接到在其他地方运行的服务器端口。但是我还没有成功过。 - Daniel
@dspacejs 加入派对有点晚,但如果仍有人需要此功能:只需删除 --noreload 参数(在 args 中指定)。 - sqe
1
我使用类似的配置来运行一个Python模块,这个模块基本上是一个Flask应用程序。当您在任何控制器的任何行上放置调试器红点时,代码执行不会在那里暂停。有人有关于此的任何想法吗? - Shubham Jain

6

VSCode有一个官方教程来讲解这个:

https://code.visualstudio.com/docs/python/tutorial-django

需要进行几个步骤,由于步骤比较多,我不想手动写出全部步骤,但是我会尝试总结需要做什么:

下面的文字基本上是以上教程的部分复制,我并不是在声称我自己想出了这些内容。

1. 确认先决条件 (使用VS Code Python扩展程序,在本地机器上安装Python) 链接至文档

2. 使用Python虚拟环境 链接至文档

除了使用Python虚拟环境外,您还需要在VS Code中选择此虚拟环境内的Python可执行文件作为解释器。可以按照以下方式完成:

在VS Code中,打开命令面板(View > Command Palette或(Ctrl+Shift+P))。然后选择Python: Select Interpreter

然后,您可以选择虚拟环境内的Python可执行文件,其路径可以通过其来识别。

3. 创建调试器启动配置文件

在此文档中进行了描述

在VS Code窗口左上角

4. 现在可以开始调试

这部分文档将介绍如何进行调试


1
我按照那个教程的确切步骤操作,但我的断点无法正常工作。在manage.py中设置的断点可以被触发,但是在我的视图中设置的任何断点都被忽略了。有什么建议吗? - NiH

3
只有实验性配置对我有效。
{
            "name": "Django",
            "type": "pythonExperimental",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "args": [
                "runserver",
                "--noreload",
                "--nothreading"
            ],
            "django": true
},

标准配置会导致未验证的断点问题。


与默认选项 "type": "python" 不同,这个选项会给我一个错误提示:未识别的调试类型。请确保您已安装相应的调试扩展并启用它。 请问是否需要安装扩展程序?如果需要,是哪一个?我已经安装了默认的 Python 和 Django 开发扩展程序。 - alelom

2
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}\\manage.py",
            "args": [
                "runserver"
            ],
            "django": true
        },
        {
            "name": "Django: makemigrations",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}\\manage.py",
            "args": [
                "makemigrations"
            ],
            "django": true
        },
        {
            "name": "Django: migrate",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}\\manage.py",
            "args": [
                "migrate"
            ],
            "django": true
        },
    ]
}

0

在我禁用自动重新加载(--noreload作为参数是至关重要的,不太确定它为什么会导致调试问题)之前,没有任何方法对我有效。


很遗憾,“--noreload” 对我仍然不起作用。 - alelom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接