Skip to main content

ClojureScript integration for Django

Project description

Transparent integration of ClojureScript in a Django project. Currently supports Leiningen and Figwheel, which means you can rely on Figwheel’s auto-refresh features during development.

This project is heavily inspired by the django-webpack-loader project, which has the similar goal of transparently including and using Webpack bundles in a Django project.

The integration with Leiningen is simplistic: information is read from the Leiningen project.clj file to determine which output bundles are available and where. This means that there is a tight coupling to the structure of the Leiningen project file – expect things to break if you have a really exotic project setup!

Install

$> pip install django-cljs

Usage

Examples

This repository contains one example application, have a look at that to see a working setup in action.

Some more advanced examples are on the way!

Settings

Only Leiningen projects are supported. With a project.clj file somewhere in your project, you can set the django-cljs loader up in your app settings.

It should look something like this:

from edn_format.edn_lex import Keyword

BASE_DIR = ...  # should point to the project root

STATIC_URL = '/static/'

CLJS_LOADER = {
    # where to find the Leiningen project file
    'PROJECT_FILE': os.path.join(BASE_DIR, 'project.clj'),

    # If True, tries to load JS files from the Figwheel dev server.
    # Set to False in production mode.
    'FIGWHEEL': True,

    # Which cljs build (defined in the project.clj file) to use.
    # Change this for production.
    'CLJS_BUILD': Keyword('dev'),

    # The root folder for assets built by Leiningen.
    # In development mode, this matches the Figwheel root.
    'ROOT': 'assets/public',
}

# Add the folder where cljsbuild output lands as a source directory for the
# staticfiles app. This assumes you are using the staticfiles app.
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, CLJS_LOADER['ROOT']),
)

Where you put the ClojureScript source files is up to you - assets/cljs is one possibility. See the example projects.

Template tag

Use the render_bundle template tag to hook the compiled ClojureScript bundle into your application. It will insert a script tag and call the main function you have defined in the Leiningen project file.

{% load render_bundle from cljs_loader %}
...
<body>
  ...
  {% render_bundle %}
</body>

Development

Open a second terminal and run lein figwheel. Alternatively, launch a REPL and do (fig-start). The JavaScript bundle will be loaded from the Figwheel development server.

Production

Assuming you have a cljsbuild profile called prod:

$> lein cljsbuild once prod

The compiled bundle that is produced by lein cljsbuild can be collected with python manage.py collectstatic, or whichever your preferred method of including production assets is.

The render_bundle template tag does not need to change.

Contributing

You can run the test suite in the tests folder with the following command:

$> make test

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-cljs-loader-0.1.0.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_cljs_loader-0.1.0-py2.py3-none-any.whl (8.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django-cljs-loader-0.1.0.tar.gz.

File metadata

File hashes

Hashes for django-cljs-loader-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3aaaf239c46a6670d26dd060096410743a5becb7073ef2c2d2f551f1577eca2e
MD5 1dfb102316ba22079ed555e5eaa22a6f
BLAKE2b-256 b7324d3efd4849f78da3b8342b3c5397b5afeca72dfa215eba164c80fbfb7838

See more details on using hashes here.

File details

Details for the file django_cljs_loader-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_cljs_loader-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7320675bd939924f123d1fc294d1737ff79a74f6835d541bfaa6c84a5b12d960
MD5 f592dccf6b83c2df6e0ee5380a9747cf
BLAKE2b-256 d539062d064bef2b3deba830569449ad551c2e85c8c825f7f0834e9f3d9ba74c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page