django-asset-definitions allows to define collections of static files (JavaScript, CSS) in Python code and (re)use them in Django views and templates.
Project description
django-asset-definitions
Asset definitions are collections of static files (JavaScript, CSS) defined in Python code and (re)used in Django views and templates.
An example of asset definition is Media class that you can define in Django forms.
django-asset-definitions aim to extend the application of asset definitions beyond forms and use them as the main way to describe and organize JavaScript and CSS files.
Installation
pip install django-asset-definitions
Usage
Define:
import asset_definitions
my_media = asset_definitions.Media(
js=(
"media.js",
"""<script>window.addEventListener("load", function() {console.log("Loaded!");});</script>""",
),
css={
"all": (
"media.css",
),
}
)
Combine:
extended_media = my_media + asset_definitions.Media(
js=("extension.js", )
)
Define in views:
import asset_definitions
class MyView(asset_definitions.MediaDefiningView, ...):
class Media:
js = (
"media.js",
)
css = {
"all": (
"media.css",
),
}
...
Form media is added to view media automatically:
import asset_definitions
from django.views.generic import FormView
class MyFormView(asset_definitions.MediaDefiningView, FormView):
...
Use in templates:
{{ view.media.render }}
Or:
{{ view.media.js.render }}
{{ view.media.css.render }}
See an extended example below.
asset_definitions.Media and django.forms.Media
asset_definitions.Media provides the same API as django.forms.Media. In fact, it is inherited from django.forms.Media.
It is safe to combine asset_definitions.Media with django.forms.Media.
asset_definitions.Media objects are lazy. If two or more instances of asset_definitions.Media are combined, the result is computed only when media is rendered. It is safe to use reverse_lazy() with asset_definitions.Media. It is important if you define your assets on a module level.
Media class in MediaDefiningView does not support extend option. To add to the media defined in a parent view class, you should override get_media method and use super(MyView, self).get_media().
Example:
myapp/urls.py:
urlpatterns = (
url("/", MyView.as_view()),
url("/global-variables.js", global_js_variables, name="global_js_variables"),
)
myapp/views.py:
import asset_definitions
from . import assets
class MyView(assets_definition.MediaDefiningView, TemplateView):
template_name = "template.html"
class Media:
js = ("media.js", )
css = {"all": ("media.css", )}
def get_media():
return (
assets.global_js_variables +
assets.jquery +
super(MyView, self).get_media()
)
def global_js_variables(request):
js_content = 'const CURRENT_USER="{}";'.format(request.user)
return HttpResponse(js_content, content_type="application/javascript")
myapp/assets.py:
import asset_definitions
from django.core import urlresolvers
global_js_variables = asset_definition.Media(
js=urlresolvers.reverse_lazy("global_js_variables"),
)
jquery = asset_definitions.Media(
js="jquery.js"
)
myapp/templates/template.html:
<html>
<head>
{{ view.media.css.render }}
</head>
<body>
...
{{ view.media.js.render }}
</body>
</html>
Changes
1.0.0
Add Django 3.x and 4.x compatibility
Drop support for Python 2
Python 3.6 is the minimum requirement
0.3
Add Django 2.0 compatibility
Extract MediaDefiningClass base class from MediaDefiningView
0.2
Specify different requirements in setup.py based on the current Python version
Allow using inline JavaScript in media definitions (wrap with <script> tag)
0.1
Initial release
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
File details
Details for the file django-asset-definitions-1.0.0.tar.gz
.
File metadata
- Download URL: django-asset-definitions-1.0.0.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9873d77f15f902cd123f74ee5b397db8c46739ad7c5bcc5998c1db1379677a9c |
|
MD5 | 06f4805e930ba3b6a6dd9652320b2686 |
|
BLAKE2b-256 | 3bf6cdc7424ee6722d3aa42a5dde0719157b0543a9d870d107a02702c69e0a39 |