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