Commencer
Installation
djLint est construit avec Python et publié sur PyPI. Avec uv, ajoutez-le à votre projet comme dépendance de développement :
uv add --dev djlint
Ou installez-le en tant qu’outil autonome :
uv tool install djlint
Ou avec pip :
pip install djlint
Ou avec pipx:
pipx install djlint
Ou avec la formule Homebrew maintenue par la communauté sur macOS ou Linux:
brew install djlint
Ou avec npm - attention : le paquet npm n’est qu’une enveloppe, son script d’installation exécute pip install --upgrade djlint avec le python3 de votre chemin système. npm ne gère ni ne désinstalle le paquet réel - préférez pip directement si possible.
npm i djlint
Pour lancer djLint à chaque commit, voir pre-commit.
Utilisation de l’interface CLI
djLint est une application en ligne de commande. Voir la page configuration pour une configuration avancée.
Usage: djlint [OPTIONS] SRC ...
djLint · HTML template linter and formatter.
Options:
--version Show the version and exit.
-e, --extension TEXT File extension to check [default: html]
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
--reformat Reformat the file(s).
--check Check formatting on the file(s).
--stdin-filename TEXT Filename to use for per-file-ignores and
messages when reading from stdin. [default: -]
--indent INTEGER Indent spacing. [default: 4]
--quiet Do not print diff when reformatting.
--profile TEXT Enable defaults by template language. ops:
django, jinja, nunjucks, handlebars, liquid,
golang, angular, tera, askama, html [default:
html]
--require-pragma Only format or lint files that starts with a
comment with the text 'djlint:on'
--lint Lint for common issues. [default option]
--use-gitignore Use .gitignore file to extend excludes.
--allow-empty-input Exit with 0 instead of 2 when the given paths
match no files.
--warn Return errors as warnings.
--preserve-leading-space Attempt to preserve leading space on text.
--preserve-blank-lines Attempt to preserve blank lines.
--preserve-class-newlines Preserve line breaks inside multiline class
attributes.
--format-css Also format contents of <style> tags.
--format-js Also format contents of <script> tags.
--format-attribute-js-json Also format JavaScript/JSON inside HTML
attributes.
--format-attribute-js-json-pattern TEXT
Regex pattern to match JavaScript attributes.
--format-attribute-js-json-min-props INTEGER
Minimum number of properties to treat
attribute content as JS/JSON.
--configuration FILE Path to global configuration file in
djlint.toml, .djlint.toml, or .djlintrc format
--prefer-configuration Let --configuration override the project's own
config file, rather than the other way round.
--rules FILE Path to custom rules file in
.djlint_rules.yaml format
--statistics Count the number of occurrences of each
error/warning code.
--include TEXT Codes to include. ex: "H014,H017"
--ignore-case Do not fix case on known html tags.
--ignore-blocks TEXT Comma list of template blocks to not indent.
--blank-line-after-tag TEXT Add an additional blank line after {% <tag>
... %} tag groups.
--blank-line-before-tag TEXT Add an additional blank line before {% <tag>
... %} tag groups.
--line-break-after-multiline-tag
Do not condense the content of multi-line tags
into the line of the last attribute.
--custom-blocks TEXT Indent custom template blocks. For example {%
toc %}...{% endtoc %}
--custom-html TEXT Indent custom HTML tags. For example <mjml>
--exclude TEXT Override the default exclude paths.
--extend-exclude TEXT Add additional paths to the default exclude.
--linter-output-format TEXT Customize order of linter output message.
--max-line-length INTEGER Max line length. [default: 120]
--max-attribute-length INTEGER Max attribute length. [default: 70]
--format-attribute-template-tags
Attempt to format template syntax inside of
tag attributes.
--single-attribute-per-line When an opening tag wraps, put each attribute
on its own line.
--per-file-ignores <TEXT TEXT>...
Ignore linter rules on a per-file basis.
--indent-css INTEGER Set CSS indent level.
--indent-js INTEGER Set JS indent level.
--close-void-tags Add closing mark on known void tags. Ex: <img>
becomes <img />
--no-line-after-yaml Do not add a blank line after yaml front
matter.
--name-endblocks Name the endblock of a block written across
lines.
--sort-attributes Sort attributes by name, with id first and
class second.
--sort-load-tags Sort the libraries in {% load %} tags.
--no-indent-inner-html Do not indent <head> and <body> below <html>.
--no-function-formatting Do not attempt to format function contents.
--no-set-formatting Do not attempt to format set contents.
--keep-br-inline Keep <br> on the line of the text it breaks.
--no-entity-formatting Do not rewrite entity references as
characters.
--quote-style [double|single] Quotes to use for strings inside template
tags. [default: double]
--max-blank-lines INTEGER Consolidate blank lines down to x lines.
[default: 0]
--github-output / --no-github-output
Output GitHub-compatible formatting.
--sarif Output findings as SARIF 2.1.0 json, for
GitHub code scanning and other tools.
-h, --help Show this message and exit.
Utilisation de Path vs Stdin
djLint fonctionne avec un path ou stdin.
Exécution avec un path -
djlint /path/to/templates --lint
Ou un fichier spécifique -
djlint /path/to/this.mustache --lint
Ou avec stdin -
echo "<div></div>" | djlint -
Stdin peut également être utilisé pour reformater le code. La sortie sera uniquement le code formaté sans messages.
echo "<div></div>" | djlint - --reformat
Sortie -
<div></div>
Lors de la lecture depuis stdin, djLint n’a pas de vrai chemin à comparer avec per-file-ignores ni à afficher dans les messages, il utilise donc - par défaut. Passez --stdin-filename pour indiquer à djLint le vrai chemin du contenu reçu, par exemple quand une intégration d’éditeur lui envoie le contenu d’un fichier à l’enregistrement.
echo "<div></div>" | djlint - --stdin-filename templates/index.html
Codes de sortie
| Code | Signification |
|---|---|
0 |
Tout ce que djLint devait vérifier est correct, ou chaque fichier trouvé a été ignoré par votre configuration. |
1 |
djLint a trouvé des erreurs de linting ou des fichiers à reformater. Avec --warn, elles sont signalées comme avertissements et le code de sortie est 0. |
2 |
djLint n’a pas vérifié ce que vous avez demandé : les chemins ne correspondent à aucun fichier, la ligne de commande ou la configuration est invalide, ou djLint a échoué. |
Seul le code 1 signifie que djLint a examiné vos modèles et y a trouvé des problèmes. Le code 2 signifie toujours que l’exécution elle-même n’a pas abouti : un pipeline peut donc traiter les deux cas différemment sans avoir à deviner.
Le code 2 détecte une exécution qui n’a rien vérifié du tout : un mauvais chemin, une --extension qui ne correspond plus, ou des modèles qui ont été déplacés. Sans lui, une telle exécution réussit en silence sans avoir examiné un seul de vos modèles.
Les fichiers que djLint a trouvés puis ignorés volontairement, via exclude, extend_exclude, use_gitignore ou require_pragma, ne sont pas une erreur. L’exécution se termine avec le code 0, car la configuration a fait exactement ce qu’on lui demandait. C’est aussi ce qui permet à exclude de fonctionner avec pre-commit, qui transmet les noms de vos fichiers indexés, que vous vouliez ou non que djLint les examine.
Si un chemin sans aucun modèle est normal dans votre pipeline, désactivez le code 2 avec allow_empty_input :
djlint /path/to/templates --lint --allow-empty-input