Create Charts with the awesome Chart.js Library
Project description
dj_chart
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
Release history Release notifications | RSS feed
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)
Built Distribution
Close
Hashes for dj_chart-1.0.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e83e081bb21f1b3baefa3d660855eb13894d382016f0323464bbbfc5a8d620e0 |
|
MD5 | ae73f198234b1b63ab4aed775591c539 |
|
BLAKE2b-256 | 5d5297e239811ea6fe54be0123e2e8732d71458e2d687d942ea78e56c43fe241 |