Added seperate minerals detail page
This commit is contained in:
@@ -3,6 +3,7 @@ Defines the models that that Django application uses
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
from model_utils.managers import InheritanceManager
|
||||
|
||||
|
||||
class CommonInfo(models.Model):
|
||||
@@ -32,6 +33,8 @@ class Category(CommonInfo):
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='children')
|
||||
|
||||
objects = InheritanceManager()
|
||||
|
||||
@property
|
||||
def active_children(self):
|
||||
return self.children.filter(active=True).order_by('name')
|
||||
@@ -53,6 +56,16 @@ class Sample(CommonInfo):
|
||||
on_delete=models.SET_NULL,
|
||||
related_name="samples")
|
||||
|
||||
#Use the inheritance manager for handling subclasses
|
||||
objects = InheritanceManager()
|
||||
|
||||
@property
|
||||
def url(self):
|
||||
if isinstance(self, Mineral):
|
||||
return 'three_d_viewer:mineral_detail'
|
||||
else:
|
||||
return 'three_d_viewer:detail'
|
||||
|
||||
|
||||
class Mineral(Sample):
|
||||
"""
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
{% extends "three_d_viewer/detail.html" %}
|
||||
|
||||
{% block pageheader %}
|
||||
<h1>{{ 'MINERALS' }}</h1>
|
||||
<p class="lead">{{ sample.description }}</p>
|
||||
{% endblock %}
|
||||
@@ -8,7 +8,7 @@
|
||||
{%endwith%}
|
||||
{% endfor %}
|
||||
{% for sample in category.active_samples %}
|
||||
<li><a href="{% url 'three_d_viewer:detail' sample.id %}">{{ sample.name }}</a></li>
|
||||
<li><a href={% url sample.url sample.id %}>{{ sample.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
@@ -6,6 +6,7 @@ urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^$', views.HomeView.as_view(), name='home'),
|
||||
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
|
||||
url(r'^(?P<pk>\d+)/$', views.MineralDetailView.as_view(), name='mineral_detail'),
|
||||
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
|
||||
{'document_root': settings.MEDIA_ROOT}),
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ Define the views for the Django MVC
|
||||
from django import template
|
||||
from django.views import generic
|
||||
|
||||
from three_d_viewer.models import Sample, Category
|
||||
from three_d_viewer.models import Sample, Category, Mineral
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ class HomeView(generic.ListView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(HomeView, self).get_context_data(**kwargs)
|
||||
context['active_samples'] = Sample.objects.filter(active=True).order_by('name')
|
||||
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
|
||||
@@ -37,7 +37,15 @@ class DetailView(generic.DetailView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(DetailView, self).get_context_data(**kwargs)
|
||||
context['active_samples'] = Sample.objects.filter(active=True).order_by('name')
|
||||
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 MineralDetailView(DetailView):
|
||||
"""
|
||||
Add extra functionality for mineral details
|
||||
"""
|
||||
|
||||
model = Mineral
|
||||
template_name = 'three_d_viewer/mineral_detail.html'
|
||||
Reference in New Issue
Block a user