HTML Whitespace remover for Django
Introduction :
A powerful tool to optimize Django rendered templates
Why use "django_stip_whitespace" ?
- Adds line break to InlineJS.
- It can automagically minify inline CSS, JS.
- Removes from HTML.
- It speeds up website by reducing the HTML size.
- Drop in replacement for django.gzip.GzipMiddleware.
- It compiles regex at runtime. So it's blazing fast.
- Its mostly based on C ( gzip ) and Rust ( minify-html ) libraries.
- Significantly lower bytes transferred when working with frameworks like AlpineJs ( Almost fully working & Please open a issue in the Issue Tracker if you encounter any bug) & Petite Vue.
- Is very customizable. ( You can configure lower level minify-html rust bindings and also the lower level python bindings from settings.py )
Why souldn't you use "django_stip_whitespace" ?
- You don't like having unnecessary ';;' in your HTML. ( If you know any regex to fix this please put a pull request )
- Although I tried my best to use Compiled Language for Optimizations. It can still be sub miliseconds ( > 0.001 ) slower compared to normal Django Rendering. ( If you know any way to improve performance, please put a pull request )
Requirements :
- python-strip-whitespace
- Django > 3 ( Should work with version 2? )
- Python 3 ( Should work with all version? )
- Brotli ( or BrotliPy ) | ( Optional )
- ZSTD ( Optional )
User guide :
Installation :
Install with pip from pypi (No extra dependencies):
$ python -m pip install django_strip_whitespace
Install with pip with Brotli support:
$ python -m pip install django_strip_whitespace[brotli]
Same but with Zstandard support:
$ python -m pip install django_strip_whitespace[zstd]
Install with pip from github ( Development | Not Recommended for Production ):
$ python -m pip install https://codeload.github.com/baseplate-admin/django_strip_whitespace/zip/refs/heads/main
Then include it in your django project:
MIDDLEWARE = [ ... "strip_whitespace.middlewares.HtmlStripWhiteSpaceMiddleware.html_strip_whitespace", ]
Or if you like:
MIDDLEWARE += "strip_whitespace.middlewares.HtmlStripWhiteSpaceMiddleware.html_strip_whitespace"
Customization :
Change Lower Level Bindings :
Rust :
The module allows rust minifier options to be changed from Django's settings.py file. If you would like to change any settings, refer to minify-html's source code.
The bindings are ( by default set to True ):
STRIP_WHITESPACE_RUST_DO_NOT_MINIFY_DOCTYPE, # passes do_not_minify_doctype to minify-html STRIP_WHITESPACE_RUST_ENSURE_SPEC_CONPLIANT_UNQUOTED_ATTRIBUTE_VALUES, # passes ensure_spec_compliant_unquoted_attribute_values to minify-html STRIP_WHITESPACE_RUST_KEEP_CLOSING_TAGS, # passes keep_closing_tags to minify-html STRIP_WHITESPACE_RUST_KEEP_COMMENTS, # passes keep_comments to minify-html STRIP_WHITESPACE_RUST_KEEP_HTML_AND_HEAD_OPENING_TAGS, # passes keep_html_and_head_opening_tags to minify-html STRIP_WHITESPACE_RUST_KEEP_SPACES_BETWEEN_ATTRIBUTES, # passes keep_spaces_between_attributes to minify-html STRIP_WHITESPACE_RUST_MINIFY_CSS, # passes minify_css to minify-html STRIP_WHITESPACE_RUST_MINIFY_JS, # passes minify_js to minify-html STRIP_WHITESPACE_RUST_REMOVE_BANGS, # passes remove_bangs to minify-html STRIP_WHITESPACE_RUST_REMOVE_PROCESSING_INSTRUCTIONS, # passes remove_processing_instructions to minify-html
If you would like to change any of the above variables, simply put them in settings.py ( Please note that every variable here is a python boolean ).
For example:
# settings.py STRIP_WHITESPACE_RUST_DO_NOT_MINIFY_DOCTYPE = False
Python :
The module allows python minifier options to be changed from Django's settings.py file. If you would like to change any settings, refer to python-module's source code.
The bindings are ( by default set to a sane value ):
STRIP_WHITESPACE_PYTHON_REMOVE_COMMENTS, # False | removes comments from HTML using python ( not recommended cause rust can do that just fine and fast ) STRIP_WHITESPACE_PYTHON_CONDENSE_STYLE_FROM_HTML, # True | replaces '