This package provides decorators for templates rendering and CBV mixin in request context with simple code use.
Important: all template renders goes in request context. Sessions, cookies, meta, etc is available from templates.
You can install library via pip.
pip install django-render
You can select template render engine via settings.py directive.
RENDER_ENGINE='coffin'
django-render will use coffin adapter for rendering templates transparent.
It support simple template rendering with decorator function. It is basic use example. Will be rendered template "APPNAME/VIEWNAME.html"
from render.mixins import render
@render
def index():
#index view logic goes here
return {
'var1': val1,
'var2': val2,
}
from render.mixins import render
@render
def index():
#index view logic goes here
return {
'var1': val1,
'var2': val2,
}, 'text/plain'
You can override VIEWNAME part in template path. See example.
from render.mixins import render
@render
def all():
#all view logic goes here
return 'index.html', {
'var1': val1,
'var2': val2,
}
You can override APPNAME part in template path. See example.
from render.mixins import renderer
@renderer("otherapp")
def all():
#all view logic goes here
return 'index.html', {
'var1': val1,
'var2': val2,
}
Or you can return "ready to use HttpResponse" object. render wrapepr just return it.
from render.mixins import render
@render
def all():
if some_logic:
return HttpResponse("It's ok too")
#all view logic goes here
return 'index.html', {
'var1': val1,
'var2': val2,
}
It supports basic TemplateView's like
class Index(RenderViewMixin, TemplateView):
pass
It calculates template name as APP/VIEW.html
You can override heuristic by declaring template_name variable like
class Index(RenderViewMixin, TemplateView):
template_name = 'custom.html'
This call APP/custom.html. Or you can add full template path like
class Index(RenderViewMixin, TemplateView):
template_name = 'otherapp/custom.html'
Then will be called 'otherapp/custom.html'
Like functional view you can use render sugar in get/post/delete/etc request to your CBV.
class Index(RenderViewMixin, TemplateView):
def get(self, request, *args, **kwargs):
return {
"title": 'My awesome title!'
}
Supported all sugar with defining template name, context data and mimetype.
class Index(RenderViewMixin, TemplateView):
def get(self, request, *args, **kwargs):
return 'print.html', {
"title": 'My awesome title!'
}, 'text/plain'
It works and with global template_name defining.
class Index(RenderViewMixin, TemplateView):
template_name = 'default.html'
def get(self, request, *args, **kwargs):
return {
"title": 'My awesome title!'
}, 'text/plain'
Into template context render add few variables.
- App - Application name, where was called view
- View - View function name
- Layout - Base layout path. Compiles from APPNAME and base.html. Example: for news app it will be equal "news/base.html"
Example in template: {% extends Layout %}
<div class="{{ App }}_{{ View }}">{% block content %}</div>
It is clean & dry helper! Use it :-)
phpdude