Lightweight set of middleware classes that inject visual indicators for each type of environment that a project is deployed to.
Project description
Table of contents
Introduction
Lightweight set of middleware classes that inject visual indicators for each type of environment that a project is deployed to. Inspired by this article.
Quickstart
- Install the package: pip install django-envi.
- Add the 'envi' app to your INSTALLED_APPS.
- Install the desired middleware class to MIDDLEWARE_CLASSES:
- envi.middleware.EnviFooterMiddleware injects a sticky footer to all pages that displays the current environment.
- In each environment’s settings file, add the ENVIRONMENT_KEY setting, with the corresponding environment key string. See below.
Built-in environments
There are a number of built-in environment definitions:
- 'local': A striped grey banner. Appears site-wide (default).
- 'dev': A striped blue banner. Appears site-wide.
- 'staging': A striped yellow banner. Appears site-wide.
- 'production': A striped red banner. Only appears in /admin.
Configuration
The following settings are supported in your settings.py:
- ENVI_ENVIRONMENT_KEY: A string representing the key to use to search the ENVI_ENVIRONMENTS settings dictionary. Defaults to 'local'.
- ENVI_ENVIRONMENTS: A dictionary containing key-value pairs consisting of environment keys (as strings) mapped to dictionaries representing an environment definition. By default, there are 4 built-in environments available for selection.
- ENVI_ENVIRONMENT: The current environment. This can either be defined explicitly (see Creating environments), otherwise it will be set to the corresponding dictionary by looking up the ENVI_ENVIRONMENT_KEY within the ENVI_ENVIRONMENTS dictionary.
Creating environments
Environments can be created using the following dictionary structure:
CUSTOM_ENV = { # Required for all subclasses of EnviBaseMiddleware. "SHOW_IN_ADMIN": True, "SHOW_IN_SITE": True, # Only required for subclasses of EnviBaseTemplateMiddleware. "CONTEXT": { # The contents of this dictionary will be passed to the template # being rendered. You can add anything you want here. "CONTENT": "ENVIRONMENT: STAGING", "COLOR_A": "#ffba1e", "COLOR_B": "#dba11a", }, }
Then, this environment definition can be either:
Added to the ENVI_ENVIRONMENTS dictionary, and activated by setting the ENVI_ENVIRONMENT_KEY to the respective key.
ENVI_ENVIRONMENTS = { "custom_key_1": CUSTOM_ENV, "custom_key_2": OTHER_CUSTOM_ENV, } ENVI_ENVIRONMENT_KEY = "custom_key_1"
Used to set the ENVI_ENVIRONMENT value directly.
ENVI_ENVIRONMENT = CUSTOM_ENV
Advanced usage
The implementation of django-envi makes it easy to customize.
Extending via templates
TODO: How to.
Extending via subclassing
TODO: How to.
Compatability
The latest build of django-envi has been tested on the following versions of Django:
- 2.0.1
- 1.11.9 (LTS)
- 1.8.18 (LTS)
Changelog
Version | Description |
---|---|
0.2.1 | Bugfix to prevent adding the banner to AJAX requests. Thanks to @marksweb for the PR. Also adds backwards compatability for Django versions < 1.10. |
0.2 | Repackaged without unnecessary docs/images directory. All documentation can be found in README.rst. |
0.1.2 | Fixes reference to nonexistent template. Manifest issue. |
0.1.1 | Renamed to django-envi. |
0.1 | Initial version. |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.