Skip to main content

Create Charts with the awesome Chart.js Library

Project description

dj_chart

https://badge.fury.io/py/dj_chart.png

The goal of dj_chart is generate charts with the awesome Chart.js library.

Requirements

Django 1.9

Quickstart

Install dj_auth:

pip install dj_chart

Put dj_auth into your INSTALLED_APPS at settings module:

INSTALLED_APPS = (
   ...
   'dj_chart',
)

TEMPLATES = [
    {'BACKEND': 'django.template.backends.django.DjangoTemplates',
     'DIRS': (your dirs, ),
     'APP_DIRS': True,
     'OPTIONS': { },
     },
]

Features

ChartMixin

You can use this Mixin for example with a Templateview or also ListView:

from django.views.generic import TemplateView

from dj_chart.views import ChartMixin

from .models import Fruits

class YourView(ChartMixin, Templateview):

    chart_title_show = True
    chart_title = u"Your Chart Title"
    chart_types_available = [PIE, DOUGHNUT]
    show_grid = False

    def get_chart_data(self):
        # populate self.chart_data
        # Apples
        self.chart_data['labels'].append("Apple")
        self.chart_data['datasets'][0]['backgroundColor'].append("rgb(0,148,63)")
        self.chart_data['datasets'][0]['data'].append(Fruits.filter(fruit_type=1).count())
        # Pear
        self.chart_data['labels'].append(Pear")
        self.chart_data['datasets'][0]['backgroundColor'].append("rgb(222,6,19)")
        self.chart_data['datasets'][0]['data'].append(Fruits.filter(fruit_type=2).count())
        # Banana
        self.chart_data['labels'].append("Banana")
        self.chart_data['datasets'][0]['backgroundColor'].append("rgb(187,187,187)")
        self.chart_data['datasets'][0]['data'].append(Fruits.filter(fruit_type=3).count())

    def get_context_data(self, **kwargs):
        context = super(YourView, self).get_context_data(**kwargs)
        context = self.set_chart_context(context)
        return context

Example with Dates on the x-axis:

from django.db import models
from django.views.generic import TemplateView

from dj_chart.constants import MONTH
from dj_chart.views import ChartMixin

class Category(models.Model):
    description models.CharField(max_length=100, verbose_name='Decscription')

class Person(models.Model):
    first_name = models.CharField(max_length=100, verbose_name='Firstname')
    last_name = models.CharField(max_length=100, verbose_name='Lastname')
    birthday = models.DateField(verbose_name=_(u'Birthday'))
    category = models.ForeignKey(Category, verbose_name=_(u'Category'))

class ChartPie(ChartMixin, TemplateView):

    chart_title_show = True
    chart_title = u"My Chart"
    chart_types_available = [PIE, DOUGHNUT, BAR]
    show_grid = False
    x_axis = MONTH
    steps = 6

    def get_chart_data(self):
        if self.queryset:
            self.set_labels_and_filter_values_for_xaxes(steps=self.steps, type=self.x_axis)

            for label in self.chart_data['labels']:
                self.label_urls[label] = {}
            self.chart_data['datasets'] = []
            for record in self.queryset:
                qs = Person.objects.filter(category=record)
                for i in range(1, len(self.filter_values)):
                    data.append(qs.filter(birthday__gte=self.filter_values[i - 1], birthday__lt=self.filter_values[i]).count())
                    self.label_urls["%s" % self.chart_data['labels'][i]]["%s" % record.description] = {"url": "%s" % reverse('your-url')}

    def get_context_data(self, **kwargs):
        context = super(ChartPie, self).get_context_data(**kwargs)
        self.queryset = Category.objects.all()
        context = self.write_chart_to_context(context)
        return context

Todo

  • Python 3

Running Tests

Does the code actually work?

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install -r requirements_test.txt
(myenv) $ coverage run --source=dj_auth runtests.py && coverage html

Credits

Tools used in rendering this package:

History

0.1.0 (2016-10-05)

  • First release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dj_chart-1.0.1.tar.gz (49.9 kB view hashes)

Uploaded Source

Built Distribution

dj_chart-1.0.1-py2.py3-none-any.whl (50.1 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page