mustachebox / mustachebox /

# -*- coding: utf-8 -*-
# Copyright (c) 2013 Yohann Gabory <>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <>.

from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from django.conf import settings
from django import http

class GraphListView(ListView):
    This class return all the avalaible graphs in the current backend
    template_name = "mustachebox/all_graph.html"

    def get_queryset(self):
        This method does not return a queryset because there is no
        database in this app.
        But it return a list of avalaible grapg to be displayed.
        backend = __import__(

        klass = getattr(backend, "Backend")
        responses = []
        for k, v in klass.__dict__.iteritems():
            if hasattr(v, '__call__'):
                responses.append({'name': k, 'doc': v.__doc__})
        return responses

class GraphDetailView(DetailView):
    This class represent a graph data.  The data you will use to
    represent a graph may not be part of you application nor your
    project. It can be somethin' commin' from an external API, a nosql
    backend, your cache backend and so one.

    So GraphDetailView implement a "get object" method to retreive the
    data using the backend you have define in your settings.

    Look at mustachebox.backends for an example backend

    def get_object(self):
        backend = __import__(
        klass = getattr(backend, "Backend")
            obj = klass(**self.kwargs)
        except AttributeError:
            raise http.Http404
        return obj

    def get_context_object_name(self, obj):
        return "object"

    def get_template_names(self):
        return "mustachebox/{0}.html".format(self.object.template)

    def render_to_response(self, context, **response_kwargs):
        if self.request.is_ajax():
            return http.HttpResponse(context['object'].data,
        return super(
            GraphDetailView, self).render_to_response(
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.