Add views to genereate badges for the state of interns
This commit is contained in:
parent
5555992f06
commit
cfe4c07d84
6 changed files with 60 additions and 2 deletions
|
@ -6,3 +6,9 @@ def environment(request):
|
|||
return {
|
||||
'debug': settings.DEBUG
|
||||
}
|
||||
|
||||
def base_url(request):
|
||||
""" Template context processor adding a base URL variable to the context. """
|
||||
return {
|
||||
'base_url': settings.BASE_URL
|
||||
}
|
||||
|
|
|
@ -8,4 +8,5 @@ urlpatterns = [
|
|||
path('', CityList.as_view(), name='city_list'),
|
||||
path('<city>/', AssociationList.as_view(), name='association_list'),
|
||||
path('<city>/<slug>/', AssociationDetail.as_view(), name='association'),
|
||||
path('<city>/<slug>/badge.svg', AssociationBadgeView.as_view(), name='association_badge'),
|
||||
]
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
import lxml.html
|
||||
from django import forms
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.urls import reverse_lazy
|
||||
from django.views import View
|
||||
from django.views.generic import ListView, UpdateView
|
||||
|
||||
from dronken.models import City, Association, ExtraState
|
||||
import anybadge
|
||||
|
||||
from dronken.models import City, Association
|
||||
|
||||
|
||||
class CityList(ListView):
|
||||
|
@ -55,3 +60,36 @@ class AssociationDetail(UpdateView):
|
|||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy('dronken:association_list', kwargs={'city': self.get_object().city.slug})
|
||||
|
||||
|
||||
class AssociationBadgeView(View):
|
||||
def get(self, *args, **kwargs):
|
||||
city = kwargs['city']
|
||||
slug = kwargs['slug']
|
||||
|
||||
try:
|
||||
city_obj = City.objects.get(slug=city)
|
||||
except City.DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
try:
|
||||
association = Association.objects.get(city=city_obj, slug=slug)
|
||||
except Association.DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
image = self.generate_badge(association)
|
||||
|
||||
return HttpResponse(image, content_type="image/svg+xml")
|
||||
|
||||
STATE_TO_COLOR = {
|
||||
'nuchter': 'lightgrey',
|
||||
'dronken': 'green',
|
||||
'brak': 'yellowgreen',
|
||||
}
|
||||
|
||||
def generate_badge(self, association):
|
||||
badge = anybadge.Badge(lxml.html.fromstring(association.short_name).text_content(),
|
||||
association.get_state_display(),
|
||||
default_color=AssociationBadgeView.STATE_TO_COLOR.get(association.state, 'yellow'))
|
||||
|
||||
return badge.badge_svg_text
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue