Integration of ViteJS in a Django project.
Project description
Django Vite
Integration of ViteJS in a Django project.
Installation
Django
pip install django-vite
Add django_vite
to your INSTALLED_APPS
in your settings.py
(before your apps that are using it).
INSTALLED_APPS = [
...
'django_vite',
...
]
ViteJS
Follow instructions on https://vitejs.dev/guide/. And mostly the SSR part.
Then in your ViteJS config file :
- Set the
root
options the same as yourSTATIC_URL
Django setting. - Set the
build.outDir
path to where you want the assets to compiled. - Set the
build.manifest
options totrue
. - As you are in SSR and not in SPA, you don't have an
index.html
that ViteJS can use to determine which files to compile. You need to tell it directly. In your ViteJS config file add the following :
export default defineConfig({
build {
...
rollupOptions: {
input: {
<unique key>: '<path to your asset>'
}
}
}
}
Usage
Configuration
-
Define a setting variable in your
settings.py
namedDJANGO_VITE_ASSETS_PATH
containing the absolute path to where your assets are built.- This must correspond to your
build.outDir
in your ViteJS configuration. - The
DJANGO_VITE_ASSETS_PATH
must be included in yourSTATICFILES_DIRS
Django setting.
- This must correspond to your
-
Define a setting variable in your
settings.py
namedDJANGO_VITE_DEV_MODE
containing a boolean defining if you want to include assets in development mode or production mode.- In development mode, assets are included as modules using the ViteJS webserver. This will enable HMR for your assets.
- In production mode, assets are included as standard assets (no ViteJS webserver and HMR) like default Django static files. This means that your assets must be compiled with ViteJS before.
- This setting may be set as the same value as your
DEBUG
setting in Django. But you can do what is good for yout needs.
Template tags
Include this in your base HTML template file.
{% load django_vite %}
Then in your <head>
element add this :
{% vite_hmr_client %}
- This will add a
<script>
tag to include the ViteJS HMR client. - This tag will include this script only if
DJANGO_VITE_DEV_MODE
is true, otherwise this will do nothing.
Then add this tag to load your scripts :
{% vite_asset '<path to your asset>' %}
This will add a <script>
tag including your JS/TS script :
- In development mode, all scripts are included as modules.
- In development mode, all scripts are marked as
async
anddefer
. - You can pass a second argument to this tag to overrides attributes passed to the script tag.
- This tag only accept JS/TS, for other type of assets, they must be
included in the script itself using
import
statements. - In production mode, the library will read the
manifest.json
file generated by ViteJS and import all CSS files dependent of this script (before importing the script). - You can add as many of this tag as you want, for each input you specify in your ViteJS configuration file.
- The path must be relative to your
root
key inside your ViteJS config file. - The path must be a key inside your manifest file
manifest.json
file generated by ViteJS. - In general, this path does not require a
/
at the beginning (follow yourmanifest.json
file).
{% vite_asset_url '<path to your asset>' %}
This will generate only the URL to an asset with no tag surrounding it. Warning, this does not generate URLs for dependant assets of this one like the previous tag.
Miscellaneous configuration
You can redefine those variables in your settings.py
:
DJANGO_VITE_DEV_SERVER_PROTOCOL
: ViteJS webserver protocol (default :http
).DJANGO_VITE_DEV_SERVER_HOST
: ViteJS webserver hostname (default :localhost
).DJANGO_VITE_DEV_SERVER_PORT
: ViteJS webserver port (default :3000
)DJANGO_VITE_WS_CLIENT_URL
: ViteJS webserver path to the HMR client used in thevite_hmr_client
tag (default :@vite/client
).DJANGO_VITE_MANIFEST_PATH
: Absolute path (including filename) to your ViteJS manifest file. This file is generated in yourDJANGO_VITE_ASSETS_PATH
. But if you are in production (DEBUG
is true) then it is in yourSTATIC_ROOT
after you collected your static files.
Notes
- In production mode, all generated path are prefixed with the
STATIC_URL
setting of Django.
Thanks
Thanks to Evan You for the ViteJS library.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-vite-1.0.1.tar.gz
.
File metadata
- Download URL: django-vite-1.0.1.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac3e6e72df55ab48cf7ce9b0b4bee2b35a6c051a0952eba069fbcdbaed63e9d6 |
|
MD5 | feb9be6dfc4523b2aa48dee11658e1ad |
|
BLAKE2b-256 | 6850088c369d9b0f8b536dace5002195987238804e6115fb7e3812cd6eefde20 |
File details
Details for the file django_vite-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: django_vite-1.0.1-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31307bb9107e0e7f79c84916aadfc7097336eb422d527b7474177e58125dcf36 |
|
MD5 | 3f14e3957011045d624c04fdb13a9ab4 |
|
BLAKE2b-256 | 4d0db82cd5c44ee048d64ed9a43a8232208cbd5f1f65df612270c0e34c7ebfb6 |