Başlarken

Kurulum

djLint Python ile yazılmıştır ve PyPI üzerinde yayımlanır. uv ile projenize geliştirme bağımlılığı olarak ekleyin:

uv add --dev djlint

Ya da bağımsız bir araç olarak kurun:

uv tool install djlint

Ya da pip ile:

pip install djlint

Ya da pipx ile:

pipx install djlint

Ya da macOS veya Linux’ta topluluk tarafından sürdürülen Homebrew formülüyle:

brew install djlint

Ya da npm ile. Uyarı: npm paketi yalnızca bir sarmalayıcıdır. Kurulum betiği, sistem yolunuzda hangi python3 varsa onunla pip’i çalıştırır ve o npm sürümüne ait djLint sürümünü kurar; bu, daha yeni bir djLint’in yerine eskisini kurabilir. npm asıl paketi yönetmez ya da kaldırmaz, bu yüzden mümkünse pip’i tercih edin.

npm i djlint

djLint’i her commit’te çalıştırmak için pre-commit bölümüne bakın.

Komut satırı kullanımı

djLint bir komut satırı uygulamasıdır. Gelişmiş yapılandırma için yapılandırma sayfasına bakın.

Usage: djlint [OPTIONS] SRC ...

  djLint · HTML template linter and formatter.

Options:
  --version                       Show the version and exit.
  --lsp                           Run as a language server over stdio, for
                                  editors.
  -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.

Not

djlint komutu bulunamıyorsa Python’un PATH’inizde olduğundan emin olun.

Yol ya da stdin kullanımı

djLint bir yolla ya da stdin ile çalışır.

Bir yolla çalıştırma -

djlint /path/to/templates --lint

Ya da belirli bir dosyayla -

djlint /path/to/this.mustache --lint

Ya da stdin ile -

echo "<div></div>" | djlint -

Stdin kodu yeniden biçimlendirmek için de kullanılabilir. Çıktı, mesajlar olmadan yalnızca biçimlendirilmiş koddan oluşur.

echo "<div></div>" | djlint - --reformat

Çıktı -

<div></div>

stdin’den okurken djLint’in per-file-ignores ile eşleştireceği ya da mesajlarda göstereceği gerçek bir yol yoktur; bu yüzden varsayılan olarak - kullanır. Aktarılan içeriğin gerçek yolunu djLint’e bildirmek için --stdin-filename verin; örneğin bir düzenleyici entegrasyonu kaydetme sırasında bir dosyanın içeriğini aktardığında.

echo "<div></div>" | djlint - --stdin-filename templates/index.html

Çıkış kodları

Kod Anlamı
0 djLint’ten denetlemesi istenen her şey temiz ya da bulduğu her dosya yapılandırmanız tarafından atlandı.
1 djLint lint hataları ya da yeniden biçimlendirilmesi gereken dosyalar buldu. --warn bunları uyarı olarak bildirir ve bunun yerine 0 ile çıkar.
2 djLint istediğiniz şeyi denetlemedi: yollar hiçbir dosyayla eşleşmedi, komut satırı ya da yapılandırma geçersizdi veya djLint başarısız oldu.

Yalnızca 1 kodu, djLint’in şablonlarınıza baktığı ve bulduklarını beğenmediği anlamına gelir. 2 kodu ise her zaman çalıştırmanın kendisinin sonuç vermediği anlamına gelir; böylece bir işlem hattı bu ikisini ayrı ele alabilir.

2 kodu, hiçbir şeyi denetlemeyen bir çalıştırmayı yakalar: yanlış bir yol, artık eşleşmeyen bir --extension ya da yeri değişmiş şablonlar. Bu kod olmasaydı böyle bir çalıştırma sessizce başarılı olurdu.

djLint’in bulduğu ve ardından exclude, extend_exclude, use_gitignore ya da require_pragma aracılığıyla bilerek atladığı dosyalar hata sayılmaz. Böyle bir çalıştırma 0 ile çıkar, çünkü yapılandırma tam olarak kendisine söyleneni yapmıştır. exclude seçeneğinin pre-commit altında çalışmasını sağlayan da budur; pre-commit, djLint’in bakmasını isteseniz de istemeseniz de hazırlanmış (staged) dosyalarınızın adlarını iletir.

İşlem hattınızda gerçekten hiç şablon içermeyen bir yol olağansa 2 kodunu allow_empty_input ile kapatın:

djlint /path/to/templates --lint --allow-empty-input