A context decorator for Django views
Project description
django-context-decorator is a Python package for Django removing the need to call super().get_context_data(**kwargs) in nearly every Django view.
You can also read the blog post about this package.
*Note:* If this package is looking unmaintained due to no recent commits, that’s because it’s a tiny package that is feature complete and stable. I see no need to release a new version just to add explicit compatibility with new Django versions, but for as long as Django provides class-based views with a get_context_data method, this package will work with them.
Usage
from django_context_decorator import context
from django.utils.functional import cached_property
from django.views.generic import TemplateView
class MyView(TemplateView):
template_name = 'path/to/template.html'
@context
def context_variable(self):
return 'context value'
@context
@property
def context_property(self):
return 'context property'
@context
@cached_property
def expensive_context_property(self):
return 'expensive context property'
Now you’ll have access to {{ context_variable }}, {{ context_property }} and {{ expensive_context_property }} in your template.
Please note: While this package works with the @cached_property decorator, please make sure to add the @context decorator above the @cached_property decorator.
This is especially useful when you couple it with inheritance, because it allows you to re-use parent class variables without having to extract them from your context. So you could write a long-form like this:
from django.views.generic import TemplateView
class BaseMixin:
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['var_from_base_mixin'] = 'var_from_base_mixin'
return ctx
class View1(BaseMixin, TemplateView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['var_from_view_1'] = 'value_from_view_1'
return ctx
class View2(View1):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['var_from_view_2'] = 'value_from_view_2'
return ctx
instead like this:
from django.views.generic import TemplateView
from django_context_decorator import context
class BaseMixin:
@context
def var_from_base_mixin(self):
return 'var_from_base_mixin'
class View1(BaseMixin, TemplateView):
@context
def var_from_view_1(self):
return 'value_from_view_1'
class View2(View1):
@context
def var_from_view_2(self):
return 'value_from_view_2'
Development
All code resides in django_context_decorator.py. Tests are collected by pytest from all files starting with test_. To run tests, start a virtual environment, install the dependencies, and run pytest:
pip install django pytest pytest-cov pytest --cov-report term --cov=django_context_decorator
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django_context_decorator-1.6.1.tar.gz
.
File metadata
- Download URL: django_context_decorator-1.6.1.tar.gz
- Upload date:
- Size: 2.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8907905dec5d7b1c565074f57a5d1db1b3c4454d9dedb334bd4848f2ca6b54ec |
|
MD5 | 358ebc63645e09e8803b451f3f64511f |
|
BLAKE2b-256 | d52efa70983c8377d55168788ec3019f66034c511e360bccb50556a0ec26351d |
File details
Details for the file django_context_decorator-1.6.1-py3-none-any.whl
.
File metadata
- Download URL: django_context_decorator-1.6.1-py3-none-any.whl
- Upload date:
- Size: 3.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 66be0f51b61cd1d859f779fd49de62e7227a626677fed02d0de75a8362e0fce1 |
|
MD5 | f6a80d58a3d270b45733af9598cbee43 |
|
BLAKE2b-256 | f9af76c3190700dd00ef7e5d5fca9c0431c8d29c2d317388604d03b30d933cc1 |