Installation
-
Install
django_components
into your environment: -
Load
django_components
into Django by adding it intoINSTALLED_APPS
in in your settings file: -
BASE_DIR
setting is required. Ensure that it is defined: -
Set
COMPONENTS.dirs
and/orCOMPONENTS.app_dirs
so django_components knows where to find component HTML, JS and CSS files:from django_components import ComponentsSettings COMPONENTS = ComponentsSettings( dirs=[ ..., Path(BASE_DIR) / "components", ], )
If
COMPONENTS.dirs
is omitted, django-components will by default look for a top-level/components
directory,{BASE_DIR}/components
.In addition to
COMPONENTS.dirs
, django_components will also load components from app-level directories, such asmy-app/components/
. The directories within apps are configured withCOMPONENTS.app_dirs
, and the default is[app]/components
.Note
The input to
COMPONENTS.dirs
is the same as forSTATICFILES_DIRS
, and the paths must be full paths. See Django docs. -
Next, modify
TEMPLATES
section of settings.py as follows:- Remove
'APP_DIRS': True,
- NOTE: Instead of
APP_DIRS: True
, we will usedjango.template.loaders.app_directories.Loader
, which has the same effect.
- NOTE: Instead of
- Add
loaders
toOPTIONS
list and set it to following value:
This allows Django load component HTML files as Django templates.
TEMPLATES = [ { ..., 'OPTIONS': { 'loaders':[( 'django.template.loaders.cached.Loader', [ # Default Django loader 'django.template.loaders.filesystem.Loader', # Inluding this is the same as APP_DIRS=True 'django.template.loaders.app_directories.Loader', # Components loader 'django_components.template_loader.Loader', ] )], }, }, ]
- Remove
Adding support for JS and CSS¤
If you want to use JS or CSS with components, you will need to:
-
Add
"django_components.finders.ComponentsFileSystemFinder"
toSTATICFILES_FINDERS
in your settings file.This allows Django to serve component JS and CSS as static files.
-
Add
ComponentDependencyMiddleware
toMIDDLEWARE
setting.The middleware searches the outgoing HTML for all components that were rendered to generate the HTML, and adds the JS and CSS associated with those components.
Read more in Rendering JS/CSS dependencies.
-
Add django-component's URL paths to your
urlpatterns
: -
Optional. If you want to change where the JS and CSS is rendered, use
{% component_js_dependencies %}
and{% component_css_dependencies %}
.By default, the JS
<script>
and CSS<link>
tags are automatically inserted into the HTML (See JS and CSS output locations).
Optional¤
To avoid loading the app in each template using {% load component_tags %}
, you can add the tag as a 'builtin' in settings.py
TEMPLATES = [
{
...,
'OPTIONS': {
'builtins': [
'django_components.templatetags.component_tags',
]
},
},
]
Read on to find out how to build your first component!