Files
2015-02-24 13:37:55 +10:00

309 lines
11 KiB
Python

"""
Define the views for the Django MVC
"""
from django import template
from django.views import generic
from itertools import chain
from operator import attrgetter
from three_d_viewer.models import Sample, Category, Mineral, GlossaryEntry
register = template.Library()
class HomeView(generic.ListView):
"""
Show the home page
"""
template_name = 'three_d_viewer/home.html'
model = Sample
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).order_by('name')
context['parent_categories'] = Category.objects.filter(parent=None). \
filter(active=True).order_by('name')
return context
class MineralPracticeView(generic.ListView):
model = Mineral
template_name = 'three_d_viewer/minerals_practice.html'
def get_context_data(self, **kwargs):
context = super(MineralPracticeView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Minerals')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/base.html'
return context
class MineralDetailView(generic.DetailView):
"""
Add extra functionality for mineral details
"""
model = Mineral
template_name = 'three_d_viewer/mineral_detail.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(MineralDetailView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Minerals')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/base.html'
return context
def get_object(self, queryset=None):
object = super(MineralDetailView, self).get_object()
object.viewed_count += 1
object.save()
return object
class RockPracticeView(generic.ListView):
model = Sample
template_name = 'three_d_viewer/rock_practice.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(RockPracticeView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Rocks')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/base.html'
return context
class RockDetailView(generic.DetailView):
model = Sample
template_name = 'three_d_viewer/rock_detail.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(RockDetailView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Rocks')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/base.html'
return context
def get_object(self, queryset=None):
object = super(RockDetailView, self).get_object()
object.viewed_count += 1
object.save()
return object
class FossilPracticeView(generic.ListView):
model = Sample
template_name = 'three_d_viewer/fossil_practice.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(FossilPracticeView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Fossils')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/base.html'
return context
class FossilDetailView(generic.DetailView):
model = Sample
template_name = 'three_d_viewer/fossil_detail.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(FossilDetailView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Fossils')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/base.html'
return context
def get_object(self, queryset=None):
object = super(FossilDetailView, self).get_object()
object.viewed_count += 1
object.save()
return object
class GlossaryView(generic.ListView):
model = GlossaryEntry
template_name = 'three_d_viewer/glossary.html'
def get_context_data(self, **kwargs):
context = super(GlossaryView, self).get_context_data(**kwargs)
context['entries'] = GlossaryEntry.objects.all().order_by("name")
return context
class ERB101HomeView(generic.ListView):
"""
Show the home page
"""
template_name = 'three_d_viewer/erb101/home.html'
model = Sample
def get_context_data(self, **kwargs):
context = super(ERB101HomeView, self).get_context_data(**kwargs)
context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).filter(erb101_sample=True).order_by('name')
context['parent_categories'] = Category.objects.filter(parent=None). \
filter(active=True).order_by('name')
return context
class ERB101MineralPracticeView(generic.ListView):
model = Mineral
template_name = 'three_d_viewer/erb101/minerals_practice.html'
def get_context_data(self, **kwargs):
context = super(ERB101MineralPracticeView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Minerals')
result = cat.active_101_samples
for child in cat.active_children:
result = chain(result, child.active_101_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/erb101/base.html'
return context
class ERB101MineralDetailView(generic.DetailView):
"""
Add extra functionality for mineral details
"""
model = Mineral
template_name = 'three_d_viewer/erb101/mineral_detail.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(ERB101MineralDetailView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Minerals')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/erb101/base.html'
return context
def get_object(self, queryset=None):
object = super(ERB101MineralDetailView, self).get_object()
object.viewed_count += 1
object.save()
return object
class ERB101RockPracticeView(generic.ListView):
model = Sample
template_name = 'three_d_viewer/erb101/rock_practice.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(ERB101RockPracticeView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Rocks')
result = cat.active_101_samples
for child in cat.active_children:
result = chain(result, child.active_101_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/erb101/base.html'
return context
class ERB101RockDetailView(generic.DetailView):
model = Sample
template_name = 'three_d_viewer/erb101/rock_detail.html'
parent_categories = Category.objects.filter(parent=None). \
filter(active=True).order_by("name")
def get_context_data(self, **kwargs):
context = super(ERB101RockDetailView, self).get_context_data(**kwargs)
cat = Category.objects.get(name='Rocks')
result = cat.active_samples
for child in cat.active_children:
result = chain(result, child.active_samples)
context['active_samples'] = sorted(result, key=attrgetter('name'))
context['base_template'] = 'three_d_viewer/erb101/base.html'
return context
def get_object(self, queryset=None):
object = super(ERB101RockDetailView, self).get_object()
object.viewed_count += 1
object.save()
return object
class TheoryTemplateView(generic.TemplateView):
def get_context_data(self, **kwargs):
context = super(TheoryTemplateView, self).get_context_data(**kwargs)
context['base_template'] = 'three_d_viewer/base.html'
context['url_extender'] = 'three_d_viewer:'
context['olivine'] = Mineral.objects.filter(name='Olivine')[0]
context['quartz'] = Mineral.objects.filter(name='Quartz')[0]
context['microcline'] = Mineral.objects.filter(name='Microcline')[0]
context['plag'] = Mineral.objects.filter(name='Plagioclase')[0]
context['diopside'] = Mineral.objects.filter(name='Diopside')[0]
context['actinolite'] = Mineral.objects.filter(name='Actinolite')[0]
return context
class ERB101TheoryTemplateView(generic.TemplateView):
def get_context_data(self, **kwargs):
context = super(ERB101TheoryTemplateView, self).get_context_data(**kwargs)
context['base_template'] = 'three_d_viewer/erb101/base.html'
context['url_extender'] = 'three_d_viewer:erb101_'
context['olivine'] = Mineral.objects.filter(name='Olivine')[0]
context['quartz'] = Mineral.objects.filter(name='Quartz')[0]
context['microcline'] = Mineral.objects.filter(name='Microcline')[0]
context['plag'] = Mineral.objects.filter(name='Plagioclase')[0]
context['diopside'] = Mineral.objects.filter(name='Diopside')[0]
context['actinolite'] = Mineral.objects.filter(name='Actinolite')[0]
return context