Source code for visualizer.views
import json
from django.conf import settings
from django.http import Http404
from django.views.generic import TemplateView
from base import mods
from census.models import Census
from store.models import Vote
[docs]class VisualizerView(TemplateView):
"""
View for visualizing voting data.
This view renders a template for visualizing voting statistics, including the number of census entries,
votes, and participation rate.
:ivar template_name: The name of the template to render.
:vartype template_name: str
"""
template_name = 'visualizer/visualizer.html'
[docs] def get_context_data(self, **kwargs):
"""
Retrieve the context data for rendering the template.
Retrieves information about a specific voting instance, including the number of census entries,
votes, and participation rate.
:param kwargs: Keyword arguments.
:type kwargs: dict
:return: A dictionary containing context data for the template.
:rtype: dict
:raises Http404: If an error occurs while retrieving or processing the voting data.
"""
context = super().get_context_data(**kwargs)
voting_id = kwargs.get('voting_id', 0)
try:
voting = mods.get('voting', params={'id': voting_id})
context['voting'] = json.dumps(voting[0])
num_census = 0
num_votes = 0
participation = "-"
if voting[0].get('start_date'):
num_census = Census.objects.filter(voting_id=voting_id).count()
num_votes = Vote.objects.filter(voting_id=voting_id).count()
num_voters = len(
set(vote.voter_id for vote in Vote.objects.filter(voting_id=voting_id)))
if num_census != 0:
participation = str(
round(
(num_voters * 100) / num_census,
2)) + '%'
realtimedata = {
'num_census': num_census,
'num_votes': num_votes,
'participation': participation}
context['realtimedata'] = realtimedata
except BaseException:
raise Http404
return context