VSCode 中的 Python 格式化破坏了 Django 模板

Zeh*_*ort 7 python django django-templates visual-studio-code

我正在编写一个 Django 应用程序,并在 VSCode ( ) 中使用以下配置settings.json来自动格式化我的 Python 代码(我也使用 Django VSCode 扩展):

{
    "liveshare.authenticationProvider": "GitHub",
    "editor.fontSize": 16,
    "files.trimFinalNewlines": true,
    "files.trimTrailingWhitespace": true,
    "files.insertFinalNewline": true,
    "html.format.endWithNewline": true,
    "files.exclude": {
        "**/__pycache__": true
    },
    "explorer.confirmDragAndDrop": false,
    "editor.formatOnSave": true,
    "git.confirmSync": false,
    "window.zoomLevel": -1,
    "python.linting.flake8Enabled": true,
    "python.formatting.provider": "black",
    "python.linting.flake8Args": [
        "--ignore=E501,E266,W503"
    ],
    "files.associations": {
        "**/*.html": "html",
        "**/templates/**/*.html": "django-html",
        "**/templates/**/*": "django-txt",
        "**/requirements{/**,*}.{txt,in}": "pip-requirements",
        "*.html": "django-html"
    },
    "emmet.includeLanguages": {"django-html": "html"},
}

Run Code Online (Sandbox Code Playgroud)

虽然 Python 文件中的格式按预期工作,但它似乎也会干扰我的 Django 模板并破坏它们。

例如,以下模板...

{% extends "base.html" %}

{% load martortags %}

{% block title %}MyBlog - {{ object.title }}{% endblock title %}

{% block content %}
<ol>
{% for post in object_list %}
    <li>
        <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
    </li>
{% endfor %}
</ol>
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

...保存后变成这样:

{% extends "base.html" %} {% load martortags %} {% block title %}MyBlog - {{
object.title }}{% endblock title %} {% block content %}
<ol>
  {% for post in object_list %}
  <li><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></li>
  {% endfor %}
</ol>
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

如 中所示settings.json,我尝试按照 Django VSCode 扩展文档中的说明进行操作,但没有成功。事实上,无论"files.associations""emmet.includeLanguages"设置是否存在,都不会发生任何变化settings.json

如何将.py文件格式(由 VSCode 正确识别为Python文件)与.html文件格式(由 VSCode 正确识别为Django Template文件)分离,并可能对后者使用普通的 HTML 格式化程序?

Ste*_*SFT 2

Python 的格式化程序black不会格式化.html文件。

我不确定您为该.html文件选择了哪种格式。你可以看看尝试User settings.json找到这个:

  "[html]": {
    "editor.defaultFormatter": xxx
  }
Run Code Online (Sandbox Code Playgroud)

您可以右键单击编辑器并选择Format Document with找出导致该问题的格式。扩展Prettier Code formatter看起来可能会导致它。