Skip to content

Instantly share code, notes, and snippets.

@rvause
Created August 7, 2012 12:02
Show Gist options
  • Select an option

  • Save rvause/3284801 to your computer and use it in GitHub Desktop.

Select an option

Save rvause/3284801 to your computer and use it in GitHub Desktop.
Class based views for Django? (or other Python framework)
from django.http import HttpResponse
from django.template.loaders.app_directories import app_template_dirs
from django.template import TemplateDoesNotExist, RequestContext
from django.core import urlresolvers
from django.conf import settings
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
class View(object):
def __new__(cls, *ar, **kw):
return super(View, cls).__new__(cls)(*ar, **kw)
def __call__(self, request, *ar, **kw):
pass
class TemplateView(View):
def __call__(self, request, *ar, **kw):
self.request = request
try:
ctx = self.get_ctx(*ar, **kw)
except AttributeError:
ctx = {}
env = Environment(loader=FileSystemLoader(
app_template_dirs + settings.TEMPLATE_DIRS
))
env.globals['url_for'] = urlresolvers.reverse
env.globals['MEDIA_URL'] = settings.MEDIA_URL
env.globals['STATIC_URL'] = settings.STATIC_URL
try:
template = env.get_template(self.template)
except TemplateNotFound:
raise TemplateDoesNotExist(self.template)
context = RequestContext(request).update(ctx)
return HttpResponse(template.render(context))
class JSONView(View):
def make_json(self, data):
if hasattr(self, 'simple') and self.simple:
from django.utils import simplejson
return simplejson.dumps(data)
else:
from django.core import serializers
return serializers.serialize('json', data)
def __call__(self, request, *ar, **kw):
return HttpResponse(
self.make_json(self.get_data()),
mimetype='application/json'
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment