跳转到主要内容

Django模板格式化工具。

项目描述

https://img.shields.io/github/actions/workflow/status/adamchainz/djade/main.yml.svg?branch=main&style=for-the-badge https://img.shields.io/pypi/v/djade.svg?style=for-the-badge pre-commit
You can have any colour you like, as long as it’s jade.

Django模板格式化工具。

你可以拥有你喜欢的任何颜色,只要它是[d]jade。

Djade使用Django文档中模板样式指南的风格来格式化Django模板语法。它不会格式化HTML或其他模板语言。

Djade速度快,因为它是用Rust编写的:基准测试显示格式化377个模板只需20毫秒。

介绍文章中了解更多,或见下文。


通过我的书籍提高你的Django和Git技能。


安装

使用 pip

python -m pip install djade

支持Python 3.8到3.13。

pre-commit钩子

您还可以将Djade作为pre-commit钩子安装。

首先, 将以下内容添加到你的 .pre-commit-config.yaml 文件的 repos 部分 (文档)

-   repo: https://github.com/adamchainz/djade-pre-commit
    rev: ""  # Replace with the latest tag on GitHub
    hooks:
    -   id: djade
        args: [--target-version, "5.1"]  # Replace with Django version

独立的仓库可以使得安装时无需编译Rust代码。

默认配置使用pre-commit的 files 选项 来获取所有名为 templates 的目录中的所有文本文件()。如果你有不同目录中的模板,可能需要通过在 .pre-commit-config.yaml 文件中的钩子配置中添加 files 来覆盖此设置。

其次, 格式化整个项目

pre-commit run djade --all-files

检查这些更改是否存在Djade的潜在错误,并将它们提交。尝试使用 git diff --ignore-all-space 来检查非空白字符的更改。

第三, 考虑将上一个提交的SHA添加到 .git-blame-ignore-revs 文件 中。这将防止初始化格式化提交出现在 git blame 中。

保持钩子安装状态以继续格式化模板。pre-commit的 autoupdate 命令将升级Djade,以便你可以利用未来的功能。

使用方法

djade 是一个命令行工具,用于原地重写文件。传递一个模板文件列表来格式化它们

$ djade --target-version 5.1 templates/**/*.html
Rewriting templates/locomotives/steam_engine.html
Rewriting templates/locomotives/diesel.html

Djade 还可以升级一些旧的模板语法。通过添加 --target-version 选项并使用你的Django版本作为 <major>.<minor> 来启用相应的修复器

$ djade --target-version 5.1 templates/**/*.html
Rewriting templates/locomotives/steam_engine.html

Djade 没有任何递归遍历目录的能力。使用pre-commit集成、globbing或其他技术将其应用于多个文件。例如,使用 git ls-files | xargs

git ls-files -z -- '*.html' | xargs -0 djade

…或者PowerShell的 ForEach-Object

git ls-files -- '*.html' | %{djade $_}

选项

--target-version

可选:要针对的Django版本,格式为 <major>.<minor>。如果提供,Djade将为目标版本及其以上版本启用修复器。使用 djade --help 查看可用版本的列表。

--check

避免将任何格式化文件写回。相反,如果任何文件将被修改,则使用非零状态码退出,否则使用零。

格式化

Djade旨在以一种一致、干净的方式格式化Django模板语法。它希望像 Black 一样:具有偏见且无配置。Djade的风格基于Django贡献风格指南中的 模板风格部分 的规则,以及一些额外的规则。

Djade不旨在格式化模板的主语言(HTML等)。这是一个范围更广的问题,并且在没有语义变化的情况下很难实现。例如,空白在某些HTML上下文中很重要,例如在 <pre> 标签中,因此即使是调整缩进也可能影响其含义。

以下是Djade实施的规则。

Django风格指南中的规则

  • 变量和标签开头和结尾处使用单个空格

    -{{train}}
    +{{ train }}
    
    -{%  blow whistle  %}
    +{% blow whistle %}
  • 标签 {% endblock %} 不在同一行上与它们的打开标签 {% block %} 相对应

     {% block funnel %}
     ...
    -{% endblock %}
    +{% endblock funnel %}
  • 按顺序排列 {% load %} 标签中的库

    -{% load coal boiler %}
    +{% load boiler coal %}
  • 在变量内部,过滤器周围不应有空格

    -{{ fire | stoke }}
    +{{ fire|stoke }}
  • 在标签内,令牌之间应有一个空格

    -{% if  locomotive  ==  'steam engine'  %}
    +{% if locomotive == 'steam engine' %}
  • 当使用{% extends %}时,缩进顶级{% block %}{% endblock %}标签

    -  {% extends 'engine.html' %}
    +{% extends 'engine.html' %}
    
    -  {% block boiler %}
    +{% block boiler %}
       ...
    -  {% endblock boiler %}
    +{% endblock boiler %}

额外规则

  • 不允许有前导空行

    -
     {% extends 'engine.html' %}
     ...
  • 不允许有尾随空行

     ...
     {% endblock wheels %}
    -
    -
  • 注释的开始和结束时有一个空格

    -{#choo choo#}
    +{# choo choo #}
  • {% block %}标签的同行上不允许有{% endblock %}标签的标签

    -{% block funnel %}...{% endblock funnel %}
    +{% block funnel %}...{% endblock %}
  • 合并连续的{% load %}标签

    -{% load boiler %}
    -
    -{% load coal %}
    +{% load boiler coal %}
  • {% load ... from .. %}标签中排序加载的项

-{% load steam heat from boiler %}
+{% load heat steam from boiler %}
  • 缩进{% extends %}标签

    -  {% extends 'engine.html' %}
    +{% extends 'engine.html' %}
  • 当使用{% extends %}时,在顶级{% block %}{% endblock %}标签之间恰好有一个空行

 {% extends 'engine.html' %}

-
 {% block funnel %}
   ...
 {% endblock funnel %}
+
 {% block boiler %}
   ...
 {% endblock boiler %}

修复程序

Djade根据从--target-version指定的目标Django版本应用以下修复。

Django 4.2+:length_is -> length

来自发布说明

模板过滤器length_is已被弃用,现在使用length{% if %}标签内的==操作符。

Djade适当地更新了if标签内弃用的过滤器使用

-{% if engines|length_is:1 %}
+{% if engines|length == 1 %}

Django 4.1+:json_script空ID修复程序

来自发布说明

当使用json_script模板过滤器时,HTML<script>元素的id属性不再需要。

Djade移除了传递空字符串给json_script时的参数,以避免发出id=""

-{% tracks|json_script:"" %}
+{% tracks|json_script %}

Django 3.1+:trans -> translateblocktrans / endblocktrans -> blocktranslate / endblocktranslate

来自发布说明

为模板代码中的国际化引入了重命名的translateblocktranslate模板标签。旧的transblocktrans模板标签别名继续工作,并将保留在可预见的未来。

Djade适当地更新了弃用的标签

-{% load blocktrans trans from i18n %}
+{% load blocktranslate translate from i18n %}

-{% trans "Engine colours" %}
+{% translate "Engine colours" %}

-{% blocktrans with colour=engine.colour %}
+{% blocktranslate with colour=engine.colour %}
 This engine is {{ colour }}.
-{% endblocktrans %}
+{% endblocktranslate %}

Django 3.1+:ifequalifnotequal -> if

来自发布说明

模板标签{% ifequal %}{% ifnotequal %}已被弃用,现在使用{% if %}

Djade适当地更新了弃用的标签

-{% ifequal engine.colour 'blue' %}
+{% if engine.colour == 'blue' %}
 Thomas!
-{% endifequal %}
+{% endif %}

-{% ifnotequal engine.colour 'blue' %}
+{% if engine.colour != 'blue' %}
 Not Thomas.
-{% endifnotequal %}
+{% endif %}

Django 2.1+:admin_staticstaticfiles -> static

来自发布说明

{% load staticfiles %}{% load admin_static %}已被弃用,现在使用{% load static %},效果相同。

Djade适当地更新了{% load %}标签

-{% load staticfiles %}
+{% load static %}

-{% load admin_static %}
+{% load static %}

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

djade-1.2.0.tar.gz (33.3 kB 查看哈希值)

上传时间 源代码

构建分发版

djade-1.2.0-py3-none-win_arm64.whl (828.8 kB 查看哈希值)

上传时间 Python 3 Windows ARM64

djade-1.2.0-py3-none-win_amd64.whl (906.0 kB 查看哈希值)

上传时间 Python 3 Windows x86-64

djade-1.2.0-py3-none-win32.whl (821.0 kB 查看哈希值)

上传时间 Python 3 Windows x86

djade-1.2.0-py3-none-musllinux_1_1_x86_64.whl (1.2 MB 查看哈希值)

上传时间 Python 3 musllinux: musl 1.1+ x86-64

djade-1.2.0-py3-none-musllinux_1_1_aarch64.whl (1.1 MB 查看哈希值)

上传时间 Python 3 musllinux: musl 1.1+ ARM64

djade-1.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB 查看哈希值)

上传时间 Python 3 manylinux: glibc 2.17+ x86-64

djade-1.2.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB 查看哈希值)

上传时间 Python 3 manylinux: glibc 2.17+ i686

djade-1.2.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB 查看哈希值)

上传时间 Python 3 manylinux: glibc 2.17+ ARMv7l

djade-1.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB 查看哈希值)

上传时间 Python 3 manylinux: glibc 2.17+ ARM64

djade-1.2.0-py3-none-macosx_11_0_arm64.whl (1.0 MB 查看哈希值)

上传于 Python 3 macOS 11.0+ ARM64

djade-1.2.0-py3-none-macosx_10_12_x86_64.whl (1.1 MB 查看哈希值)

上传于 Python 3 macOS 10.12+ x86-64

由以下支持