Visual Studio Code和Jinja模板

29

我使用VS Code一段时间了,并安装了一些扩展。 除了在使用Flask时出现的情况,一切都很完美。

Prettier把所有的Flask代码粘在一起,且智能提示在Flask代码中无法正常工作:

{% extends "layout.html" %} {% block style %} body {color: red; } {% endblock %}
{% block body %} you must provide a name {% endblock %}

我该怎么做才能在 Flask 中运行它(尝试使用 flask-snippets)?

我在虚拟环境中运行它(在启动 vscode 之前运行)。

先感谢您了。


1
你使用了哪些扩展? 这些扩展的配置是什么? - 3x071c
1
这不是“Flask代码”,而是Jinja https://marketplace.visualstudio.com/items?itemName=samuelcolvin.jinjahtml - OneCricketeer
我使用以下插件:Auto rename Tag / Barcket Pair Colorized 2 / C/C++ / Code Runner / Code Spell Checker / Color Highlight / Debugger for Chrome / Debugger for FIrefox / Indent-raindow / Excel Viewer / HTML CSS support / IntelliSense for CSS class names in HTML / JavaScript (ES6) code snippets / Live Server / Live server Preview / Prettier / Python / Setting Sync / SVG Viewer / TODO highlight / vscode-icons。 - saquiel
感谢cricket_007,我尝试了Jinja扩展。它更好,但没有智能感知。 - saquiel
1
好的,我想我找到了我所犯的误解:
  1. VScode 语言选择是基于文件类型(.html)的。Jinja 代码在 html 文件中,因此 VScode 高亮显示 html 代码,而不是 jinja。
  2. 我安装了 Better Jinja 扩展,感谢 cricket_007。为了使它工作,我需要在 VScode 底部选择 jinja html。问题是现在 jinja 被突出显示,但所有的 html 都被禁用了高亮和自动完成。有没有办法激活 html + jinja 的高亮/自动完成?
- saquiel
6个回答

61

我也遇到了类似的问题,这是我解决它的方法:

  1. 安装Better Jinja插件。(https://marketplace.visualstudio.com/items?itemName=samuelcolvin.jinjahtml)
  • 这将允许您更改文件关联性,从普通的“HTML”更改为“jinja-html”(在我的vscode屏幕的右下角),这将停止jinja代码在保存时粘在一起。
  • 在这个阶段,您的智能感知将不再工作,引起很多烦恼,所以:
  1. 进入首选项 >> 设置 >> 在搜索设置栏中输入“文件关联”,点击“编辑settings.json”

  2. 最后在settings.json文件中添加以下行:

     "emmet.includeLanguages": {"jinja-html": "html"},
    
  3. 重新启动您的vscode。每次打开带有jinja模板代码的html文件时,只要选择了jinja-html(而不是HTML!),prettify就不会弄乱它,您的智能感知应该也能正常工作。 :)

如果您使用了Material Icon Theme扩展,当将.html文件与jinja-html关联后,文件图标会出现问题。
为了解决这个问题,请在您的settings.json中添加以下内容。
    "material-icon-theme.languages.associations": {
        "jinja-html": "html"
    },
    "files.associations": {
    "*.html": "jinja-html"
   },
    "emmet.includeLanguages": {
        "jinja-html": "html"
    },

非常感谢。我已经打开了settings.json文件,但是我不确定在哪里放置这行代码?是在最后一个闭合括号之后吗? - saquiel
你可以将它放在任何位置,任何外层花括号内。(不要忘记适当地添加逗号。)以下是一个示例:{ "workbench.iconTheme": "material-icon-theme", "workbench.colorTheme": "One Dark Pro", "python.linting.pylintArgs": [ "--generate-members" ], "python.formatting.autopep8Args": [ "--ignore", "E402" ], "emmet.includeLanguages": { "jinja-html": "html" } } - Moby J
4
这个更改增加了语法高亮但移除了智能提示自动完成。 - Bridge
这个答案总体上是可行的,但第二步对我来说无法跟随(在搜索“文件关联”后,没有“编辑settings.json”选项 - 顺便说一下,在Mac OS 12.0.1上使用VSCode 1.63.2)。相反,我从命令面板中编辑了工作区设置,然后在“settings”大括号内添加了Scott Gutthart的答案中的行。 - Seth

18

按照下面的截图添加此内容

    "files.associations": {
     "*.html": "jinja-html"
    },

[截图]


7
这是一个答案。 - Eldar Yaacobi
2
这对我也起作用了(在安装了更好的jinja插件后)。 - uwe

13

我尝试了一切,但最终成功了。

  1. 安装Better Jinja插件。

  2. 安装Django插件。

  3. 然后按下ctrl+进入设置,搜索“文件关联”,进入settings.json并编辑以下内容:

    "files.associations": { "*.html": "jinja-html" },

"emmet.includeLanguages": {"jinja-html": "html"}


这让我成功使用了jinja特定的智能感知!现在无需编辑任何json文件(VSCode版本1.60.0),因为您可以直接从设置中编辑键值对。 - NPN328

12

好的,我尝试了Ataua和Moby J提供的解决方案,但无法使它们正常工作。也许是因为我在全局使用Prettier。

这是对我有效的方法:

有一个名为Unibeautify的项目,它似乎是将不同格式化程序和文件类型的个性化设置绑定在一起的“一环之规”。

它有一个VS Code扩展程序,VSCode-Unibeautify

安装扩展程序后,您需要创建一个配置文件并告诉VS Code在哪里找到它。如果要在多种语言中使用它,可以创建和自定义自己的配置,但下面是适用于Jinja的内容,可以对我有效:

# unibeautifyrc.yaml
HTML:
  beautifiers:
    - JS-Beautify
    - Pretty Diff

然后,在您的VS Code设置中:

// settings.json
  "unibeautify.defaultConfig": "/PATH/TO/unibeautifyrc.yaml",
  "unibeautify.enabled": true,
  "[jinja-html]": {
    "editor.defaultFormatter": "Glavin001.unibeautify-vscode",
    "editor.formatOnSave": true
  },

我已经做的事情是将html文件与我的项目的settings.json中的Jinja文件类型关联起来。 如果您只想在项目基础上将Unibeautify的使用限制为仅适用于Jinja文件,则这很有帮助。 如果您愿意,您还可以使下面的*.html更具体化以适用于您的模板目录。
// MYPROJECT/.vscode/settings.json
{
  "files.associations": {
    "*.html": "jinja-html"
  }
}

这个解决方案由 JS-Beautify 提供支持,它似乎与Jinja很好地配合使用,并支持 Atoms 的 atom-beautify 扩展程序。该扩展程序的作者是 Unibeautify 和 Glavin001,一个美丽的人。


11

之前尝试的解决方案对我都不起作用,我或者会失去语法高亮、自动完成或自动格式化功能。

最终,我找到了一种解决方案,可以提供所有这些功能:

  1. 安装“Better Jinja”或“Django”(在双引号内更好的语法高亮)插件
  2. 安装“djLint”插件
  3. 按下 CTRL + Shift + P,然后输入 open settings json + Enter

这是我的配置,适用于我的jinja模板。 djLint还有更多特定于文件类型的选项可供选择(请参见VS Code中的扩展说明)。

// settings.json
"emmet.includeLanguages": {
    "jinja2": "html",
    "jinja-html": "html",
    "django-html": "html",
},
"[jinja]": {
    "editor.defaultFormatter": "monosans.djlint",
    "editor.detectIndentation": false,
    "editor.tabSize": 2,
    "editor.formatOnSave": true,
},
"[jinja-html]": {
    "editor.defaultFormatter": "monosans.djlint",
    "editor.detectIndentation": false,
    "editor.tabSize": 2,
    "editor.formatOnSave": true,
},
"[django-html]": {
    "editor.defaultFormatter": "monosans.djlint",
    "editor.detectIndentation": false,
    "editor.tabSize": 2,
    "editor.formatOnPaste": true,
},

我使用扩展名.jinja2来编写jinja模板。为了让它能够与"Django"插件一起使用,我需要在我的设置中添加以下内容:

// settings.json
"files.associations": {
    "*.jinja2": "django-html"
},

我现在唯一的抱怨是无法得到标签的联动编辑 :-D

这在我的系统上非常接近。在jinja块的开头和结尾有几个红色波浪线,但这是迄今为止最不令人沮丧的解决方案。 - roganjosh
请忽略我 - 新的代码检查器对我的单引号使用提出了异议,这在仅使用 Better Jinja 时以前并没有发生 :) - roganjosh

8
来自Mobi J的回答对我有所帮助,但我认为它是不完整的。 解决我遇到的同样问题的方法是在settings.json的最后一个闭合括号之前添加这两行代码:
    "emmet.includeLanguages": { "jinja-html": "html" },
    "editor.defaultFormatter": "vscode.emmet"

我实际上是通过导航设置(Linux 上为 Ctrl + ,)来完成的,但结果只是将该项添加到 settings.json 文件中。

在进行了这个更改之后,智能感知和 Emmet 功能在 .html 和 .jinja 文件中都能正常工作。


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