I really like auto-formatting tools like Black. I've been hoping to find one that works with Django and Jinja templates for years.
Today I managed to get excellent JavaScript Prettier formatter to run against a Jinja template file using the prettier-plugin-jinja-template plugin by David Odenwald.
I had a bit of a fiddle getting it to work because I'm still not fluent in npm
/npx
, but the recipe I used was the following.
-
Install
prettier
andprettier-plugin-jinja-template
in a directory somewhere. This command will create apackage.json
andpackage-lock.json
and a a wholenode_modules/
folder - the full install adds up to 8.4M:npm i prettier prettier-plugin-jinja-template
-
In that directory run this command:
npx prettier --plugin=prettier-plugin-jinja-template \ --parser=jinja-template \ --write path/to/your/template.html
The
--write
option will rewrite the template in place.
I first tried using npm i -g prettier prettier-plugin-jinja-template
to install the application once, globally, but I couldn't work out how to get the plugin working that way.
Instead, I've added it to my path another way. I already have a ~/.local/bin/
directory that is on my $PATH
, so I ran the npm i
command from above in that folder and then added this script there, in a file called pretty-templates.sh
(created with the help of Claude):
#!/bin/bash
# Check if at least one argument is provided
if [ $# -eq 0 ]; then
echo "Error: At least one argument is required."
exit 1
fi
# Store the current directory
original_dir=$(pwd)
# Change directory to ~/.local/bin/
cd ~/.local/bin/ || exit
# Convert all paths to absolute paths
args=()
for arg in "$@"; do
args+=("$original_dir/$arg")
done
# Run the prettier command with the absolute paths
npx prettier --plugin=prettier-plugin-jinja-template \
--parser=jinja-template \
--write "${args[@]}"
Now I can run that command from anywhere on my computer:
prettier-templates.sh templates/team_backups.html
Jeff Triplett pointed me to two pure Python alternatives: