Django模板格式化工具。
项目描述
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 -> translate,blocktrans / endblocktrans -> blocktranslate / endblocktranslate
来自发布说明
为模板代码中的国际化引入了重命名的translate和blocktranslate模板标签。旧的trans和blocktrans模板标签别名继续工作,并将保留在可预见的未来。
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+:ifequal和ifnotequal -> 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_static和staticfiles -> 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f8b2d0d38d9bb483fc2d69598c53c663a20e7993961c67be279466936b5e785d |
|
MD5 | 6d84ab9e8bdfbc188c4de015c5bd1a7e |
|
BLAKE2b-256 | 8af42bcef5a3cb506588c712fc5cdea065d3fcc4453c6456cb15cc7a212ec473 |
djade-1.2.0-py3-none-win_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5d2825c23eb4dbc4fb71b72781444f47119c1021a126458575218cdddc1fa153 |
|
MD5 | a3bada6a73cbaa64226236150a0f0d0f |
|
BLAKE2b-256 | f3715c1b9ff9ac6c89aeb4da3c426f16cb85aaeb34c2a269e6af5ec0440bb11c |
djade-1.2.0-py3-none-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 22284fae0d522c91e45c3a1f9f960e7974efd64f4df85e76f670c32efbc26a20 |
|
MD5 | a86dbdc05d1e36870c47e1811c577509 |
|
BLAKE2b-256 | 6cfa72011833d53c5170efcd1d7131006a23896512e2a8b26fd9102776936bfa |
djade-1.2.0-py3-none-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 515bc49b4a53d84390d977ba3a299e032cbf526ab6cb27efa5371663870c50fe |
|
MD5 | 5f21d9358733337b3d21105b8d5fd5d4 |
|
BLAKE2b-256 | 2f5dc35d312a8d29cb627da8d01eb9eefdcbed681b141c6d1472dd5071505098 |
djade-1.2.0-py3-none-musllinux_1_1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | da76c748cf30a81357ef4a2cb28cbc3a3bf956e65eb7e2f854acf1080135c250 |
|
MD5 | 806e397e84a143dfafe98cf40adac035 |
|
BLAKE2b-256 | d04bdbfecb0448068d256257d06760414733acb62697039816c1efdf712ce575 |
djade-1.2.0-py3-none-musllinux_1_1_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b29a576b48930354385c09673905f52a99c4e3cb5016442c1b174cae848f1784 |
|
MD5 | fd4d0a519a27263fc95d67c6ae99c184 |
|
BLAKE2b-256 | a1868b0c2c650e0fa25c70a128ce7d68491d375b53e6735b6d39b823ee002879 |
djade-1.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 988e475196d07e5cbcc14f39cc3b12bb9d40ffdb241aaaec330d6ffae2348afc |
|
MD5 | 3f680d309917f5d35a03262656f6c3ba |
|
BLAKE2b-256 | 330a35922888642d7af465dfd0622323091226038cc54de5bc455671b0c15ab7 |
djade-1.2.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7490fda7c48acfd000aa3580509225303d42ace19dcf8ec3b04ec8d8c816d838 |
|
MD5 | 4742deb00d07ee1f4a4d8ce206dbb171 |
|
BLAKE2b-256 | a57d515a27a3298984a46dc8894d946e3769d48272421e3fce2bdbed5c00aea5 |
djade-1.2.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1633516b2083ef18c627149cfa5f1964c9eaced9ce1a8618fab348f364ae8698 |
|
MD5 | 1c5b838718e8b4d498940edd4305715a |
|
BLAKE2b-256 | bd43f5487a3ae730948b509b8b42d66c8dbbedbca018eb6defdf9bf4a2930c0f |
djade-1.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0468935ad3c6155fb5a121fe50cfdb92a367751b73c68176234d2980add9b66d |
|
MD5 | 55191f045d73a09da70f20dfc33dd9fc |
|
BLAKE2b-256 | 427304b844aacba02e0ffa403fb669ee0508d0096d3ab89bda7600438b0dbbae |
djade-1.2.0-py3-none-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dac153edc06b490937afedfe5ea5bb357f56b45744cf469d18fed46cc20fabbe |
|
MD5 | 9d2333450dfe2dd809b2daaaebcc5629 |
|
BLAKE2b-256 | 160b0905ce651e9e2e10fa6f1e6c424bdb34c2ab25f806d4c0894acc1ce96b9f |