Let’s talk about integrating tailwindcss because recent javascript ecosystem doens’t really work with Python but that’s cahnged. So now your question will be wait! Is it possible to integrate with tailwind without NPM?
The answer is Yes. We can integrate with tailwind without node ecosystem. There is a standalone version tailwind releases just for this specific use cases.
I have two approach to solve this and you can pick any one of the method based on your project requirements.
Method 1
The first method is to directly add Tailwind CSS in the head of your base.html
.
<head>
<script src="https://cdn.tailwindcss.com"></script>
</head>
Because of the utility first approach the TailwindCSS is very large in nature. If you add this in your production it will slow your website very much. I highly recommend the second approach once you get through the production stage.
You can also add plugins to this method by passing additional parameter to the CDN url.
<script src="https://cdn.tailwindcss.com?plugins=forms,typography><script>
You have to remember that adding plugins by this method will further slow your websites.
Production
There is debug
template variable in Django that we can use to detect the production and load that from the cache CSS file instead of the CDN one.
Add INTERNAL_IPS
to the Django settings. If you add that then we can use debug
in the Django templates.
{% if debug %}
<script src="https://cdn.tailwindcss.com"></script>
{% else %}
<link rel="stylesheet" href="{% static 'css/main.css' %}">
{% endif %}
To generate a pure css out of your template you need to follow the second method. I say the second method is for the mature projects. For just a hobby one that you don’t need to run anything besides run server. Most suitable use cases will be the vscode code runner.
Method 2
In this method I’m going to download a Tailwind CSS standalone file. You can download the executable script from Github page Release v3.0.24 · tailwindlabs/tailwindcss · GitHub
Once you download the script make it executable. chmod +x tailwindcss-macos-arm64
and change the name to mv tailwindcss-macos-arm64 tailwindcss
Now that you configured everything it’s time to create a tailwind configuration files. Just like NPM based project now you can use the executable file to generate these.
# Create a tailwind.config.js file
./tailwindcss init
After it created the tailwind.config.js
file update the content
inside it. Recent Tailwind configuration required you to mention html files.
module.exports = {
content: ["./app/templates/*.html"],
theme: {
extend: {},
},
plugins: [
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
],
}
Create a static/css/
folder in your app and then create a input.css
file inside it.
@tailwind base;
@tailwind components;
@tailwind utilities;
Run the watcher command in a separate terminal along with runserver
. This will watch for the html file that are mentioned in the tailwind.config.js
file and it will build the equivalent CSS file and put it in the main.css file.
./tailwindcss -i ./app/static/css/input.css -o ./app/static/css/main.css --watch
For the production switch --watch
to --minify
.
Update 1:
There is a Tailwind CSS command line utility available in python package so instead of downloading it from the Github you can just install via pip.
pip install pytailwindcss