summaryrefslogtreecommitdiffstats
path: root/expo
diff options
context:
space:
mode:
Diffstat (limited to 'expo')
-rw-r--r--expo/admin.py6
-rw-r--r--expo/context.py4
-rw-r--r--expo/models.py60
-rw-r--r--expo/views.py1
-rw-r--r--expo/views_caves.py41
-rw-r--r--expo/views_logbooks.py40
-rw-r--r--expo/views_other.py10
7 files changed, 100 insertions, 62 deletions
diff --git a/expo/admin.py b/expo/admin.py
index d5a7ddd..afad1ff 100644
--- a/expo/admin.py
+++ b/expo/admin.py
@@ -29,8 +29,12 @@ class PersonAdmin(admin.ModelAdmin):
class PersonExpeditionAdmin(admin.ModelAdmin):
search_fields = ('person__first_name','expedition__year')
+class CaveAdmin(admin.ModelAdmin):
+ search_fields = ('official_name','kataster_number','unofficial_number')
+ extra = 4
+
admin.site.register(Photo)
-admin.site.register(Cave)
+admin.site.register(Cave, CaveAdmin)
admin.site.register(Area)
admin.site.register(OtherCaveName)
admin.site.register(CaveAndEntrance)
diff --git a/expo/context.py b/expo/context.py
new file mode 100644
index 0000000..06215ce
--- /dev/null
+++ b/expo/context.py
@@ -0,0 +1,4 @@
+from django.conf import settings
+
+def settings_context(request):
+ return { 'settings':settings } \ No newline at end of file
diff --git a/expo/models.py b/expo/models.py
index aa84110..bbe052c 100644
--- a/expo/models.py
+++ b/expo/models.py
@@ -22,6 +22,10 @@ class Expedition(models.Model):
class Meta:
ordering = ('year',)
+ get_latest_by = 'date_from'
+
+ def get_absolute_url(self):
+ return settings.URL_ROOT + "/expedition/%s" % self.year
# lose these two functions (inelegant, and we may create a file with the dates that we can load from)
def GuessDateFrom(self):
@@ -62,11 +66,13 @@ class Person(models.Model):
blurb = models.TextField(blank=True,null=True)
href = models.CharField(max_length=200)
- orderref = models.CharField(max_length=200) # for alphabetic
+ orderref = models.CharField(max_length=200) # for alphabetic
notability = models.FloatField() # for listing the top 20 people
bisnotable = models.BooleanField()
user = models.ForeignKey(User, unique=True, null=True, blank=True)
-
+ def get_absolute_url(self):
+ return settings.URL_ROOT + "/person/%s_%s/" % (self.first_name, self.last_name)
+
class Meta:
verbose_name_plural = "People"
class Meta:
@@ -76,12 +82,13 @@ class Person(models.Model):
if self.last_name:
return "%s %s" % (self.first_name, self.last_name)
return self.first_name
-
+
+# Below are no longer needed. Use {{ person.personexpedition_set.all.0.expedition }} for Firstexpedition, and {{ person.personexpedition_set.latest.expedition }} for Lastexpedition
# these ought to be possible by piping through |min in the template, or getting the first of an ordered list
- def Firstexpedition(self):
- return self.personexpedition_set.order_by('expedition')[0]
- def Lastexpedition(self):
- return self.personexpedition_set.order_by('-expedition')[0]
+# def Firstexpedition(self):
+# return self.personexpedition_set.order_by('expedition')[0]
+# def Lastexpedition(self):
+# return self.personexpedition_set.order_by('-expedition')[0]
def Sethref(self):
if self.last_name:
@@ -99,6 +106,14 @@ class PersonExpedition(models.Model):
date_from = models.DateField(blank=True,null=True)
date_to = models.DateField(blank=True,null=True)
is_guest = models.BooleanField(default=False)
+ COMMITTEE_CHOICES = (
+ ('leader','Expo leader'),
+ ('medical','Expo medical officer'),
+ ('treasurer','Expo treasurer'),
+ ('sponsorship','Expo sponsorship coordinator'),
+ ('research','Expo research coordinator'),
+ )
+ expo_committee_position = models.CharField(blank=True,null=True,choices=COMMITTEE_CHOICES,max_length=200)
nickname = models.CharField(max_length=100,blank=True,null=True)
def GetPersonroles(self):
@@ -112,6 +127,7 @@ class PersonExpedition(models.Model):
class Meta:
ordering = ('expedition',)
+ get_latest_by = 'date_from'
def GetPersonChronology(self):
res = { }
@@ -130,8 +146,8 @@ class PersonExpedition(models.Model):
# needs converting dict into list
return sorted(res.items())
- # don't use tabs.
- # possibly not useful functions anyway
+ # possibly not useful functions anyway -JT
+ # if you can find a better way to make the expo calendar table, be my guest. It isn't possible to do this logic in a django template without writing custom tags.
def ListDays(self):
if self.date_from and self.date_to:
res=[]
@@ -151,6 +167,7 @@ class PersonExpedition(models.Model):
def __unicode__(self):
return "%s: (%s)" % (self.person, self.expedition)
+ #why is the below a function in personexpedition, rather than in person? - AC 14 Feb 09
def name(self):
if self.nickname:
return "%s (%s) %s" % (self.person.first_name, self.nickname, self.person.last_name)
@@ -158,6 +175,8 @@ class PersonExpedition(models.Model):
return "%s %s" % (self.person.first_name, self.person.last_name)
return self.person.first_name
+ def get_absolute_url(self):
+ return settings.URL_ROOT + '/personexpedition/' + str(self.person.first_name) + '_' + str(self.person.last_name) + '/' +self.expedition.year
class LogbookEntry(models.Model):
date = models.DateField()
@@ -167,22 +186,26 @@ class LogbookEntry(models.Model):
cave = models.ForeignKey('Cave',blank=True,null=True)
place = models.CharField(max_length=100,blank=True,null=True)
text = models.TextField()
- href = models.CharField(max_length=100)
+ #href = models.CharField(max_length=100)
- # turn these into functions
- logbookentry_next = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True)
- logbookentry_prev = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True)
+ #logbookentry_next = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True)
+ #logbookentry_prev = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True)
+
class Meta:
verbose_name_plural = "Logbook Entries"
# several PersonTrips point in to this object
class Meta:
ordering = ('-date',)
-
+
+ def get_absolute_url(self):
+ return settings.URL_ROOT + "/logbookentry/" + str(self.pk)
+
def __unicode__(self):
return "%s: (%s)" % (self.date, self.title)
+
class PersonTrip(models.Model):
person_expedition = models.ForeignKey(PersonExpedition)
@@ -252,13 +275,14 @@ class Cave(models.Model):
href = models.CharField(max_length=100)
- def Sethref(self):
+ def get_absolute_url(self):
if self.kataster_number:
- self.href = self.kataster_number
+ href = self.kataster_number
elif self.unofficial_number:
- self.href = self.unofficial_number
+ href = self.unofficial_number
else:
- self.href = official_name.lower()
+ href = official_name.lower()
+ return settings.URL_ROOT + '/cave/' + self.href + '/'
def __unicode__(self):
diff --git a/expo/views.py b/expo/views.py
index 4183f68..337989a 100644
--- a/expo/views.py
+++ b/expo/views.py
@@ -1,4 +1,5 @@
# primary namespace
+
import view_surveys
import views_caves
import views_survex
diff --git a/expo/views_caves.py b/expo/views_caves.py
index 684f4b4..f2ddad8 100644
--- a/expo/views_caves.py
+++ b/expo/views_caves.py
@@ -1,57 +1,57 @@
-from django.shortcuts import render_to_response
from troggle.expo.models import Cave, CaveAndEntrance, Survey, Expedition
import troggle.expo.models as models
import troggle.settings as settings
from troggle.expo.forms import CaveForm
import search
+from troggle.alwaysUseRequestContext import render_response # see views_logbooks for explanation on this.
def caveindex(request):
caves = Cave.objects.all()
notablecavehrefs = [ "161", "204", "258", "76" ] # could detect notability by trips and notability of people who have been down them
notablecaves = [ Cave.objects.get(href=href) for href in notablecavehrefs ]
- return render_to_response('caveindex.html', {'caves': caves, 'notablecaves':notablecaves, 'settings': settings})
+ return render_response(request,'caveindex.html', {'caves': caves, 'notablecaves':notablecaves})
-def cavehref(request, href):
- cave = Cave.objects.get(href=href)
- return render_to_response('cave.html', {'cave': cave, 'settings': settings})
+def cavehref(request, cave_id='', offical_name=''):
+ try:
+ cave = Cave.objects.get(kataster_number=cave_id)
+ except DoesNotExist:
+ cave = Cave.objects.get(unofficial_number=cave_id)
+ return render_response(request,'cave.html', {'cave': cave,})
def ent(request, cave_id, ent_letter):
cave = Cave.objects.filter(kataster_number = cave_id)[0]
cave_and_ent = CaveAndEntrance.objects.filter(cave = cave).filter(entrance_letter = ent_letter)[0]
- return render_to_response('entrance.html', {'cave': cave,
+ return render_response(request,'entrance.html', {'cave': cave,
'entrance': cave_and_ent.entrance,
- 'letter': cave_and_ent.entrance_letter,
- 'settings': settings})
+ 'letter': cave_and_ent.entrance_letter,})
+
def survexblock(request, survexpath):
survexblock = models.SurvexBlock.objects.get(survexpath=survexpath)
#ftext = survexblock.filecontents()
ftext = survexblock.text
- return render_to_response('survexblock.html', {'survexblock':survexblock, 'ftext':ftext, 'settings':settings })
+ return render_response(request,'survexblock.html', {'survexblock':survexblock, 'ftext':ftext, })
def caveArea(request, name):
cavearea = models.CaveArea.objects.get(name = name)
cave = cavearea.cave
- return render_to_response('cavearea.html', {'cavearea': cavearea, 'cave': cave, 'settings':settings })
+ return render_response(request,'cavearea.html', {'cavearea': cavearea, 'cave': cave,})
def caveSearch(request):
query_string = ''
found_entries = None
if ('q' in request.GET) and request.GET['q'].strip():
query_string = request.GET['q']
- entry_query = search.get_query(query_string, ['underground_description','official_name',])
- found_entries = Cave.objects.filter(entry_query)
+ entry_query = search.get_query(query_string, ['underground_description','official_name',])
+ found_entries = Cave.objects.filter(entry_query)
- return render_to_response('cavesearch.html',
- { 'query_string': query_string, 'found_entries': found_entries, 'settings': settings})
- #context_instance=RequestContext(request))
+ return render_response(request,'cavesearch.html',
+ { 'query_string': query_string, 'found_entries': found_entries,})
def surveyindex(request):
surveys=Survey.objects.all()
expeditions=Expedition.objects.all()
- dictToPass=locals()
- dictToPass.update({'settings':settings})
- return render_to_response('survey.html',dictToPass)
+ return render_response(request,'survey.html',locals())
def survey(request,year,wallet_number):
surveys=Survey.objects.all()
@@ -63,9 +63,6 @@ def survey(request,year,wallet_number):
notes=current_survey.scannedimage_set.filter(contents='notes')
planSketches=current_survey.scannedimage_set.filter(contents='plan')
elevationSketches=current_survey.scannedimage_set.filter(contents='elevation')
-
- dictToPass=locals()
- dictToPass.update({'settings':settings})
- return render_to_response('survey.html',dictToPass)
+ return render_response(request,'survey.html', locals())
diff --git a/expo/views_logbooks.py b/expo/views_logbooks.py
index a179c50..edf2f30 100644
--- a/expo/views_logbooks.py
+++ b/expo/views_logbooks.py
@@ -6,11 +6,15 @@ from troggle.parsers.logbooks import LoadLogbookForExpedition
from troggle.parsers.people import GetPersonExpeditionNameLookup
from troggle.expo.forms import PersonForm
+# Django uses Context, not RequestContext when you call render_to_response. We always want to use RequestContext, so that django adds the context from settings.TEMPLATE_CONTEXT_PROCESSORS. This way we automatically get necessary settings variables passed to each template. So we use a custom method, render_response instead of render_to_response. Hopefully future Django releases will make this unnecessary.
+from troggle.alwaysUseRequestContext import render_response
+
import search
import re
def personindex(request):
persons = Person.objects.all()
+ # From what I can tell, "persons" seems to be the table rows, while "personss" is the table columns. - AC 16 Feb 09
personss = [ ]
ncols = 5
nc = (len(persons) + ncols - 1) / ncols
@@ -18,7 +22,7 @@ def personindex(request):
personss.append(persons[i * nc: (i + 1) * nc])
notablepersons = Person.objects.filter(bisnotable=True)
- return render_to_response('personindex.html', {'persons': persons, 'personss':personss, 'notablepersons':notablepersons, 'settings': settings})
+ return render_response(request,'personindex.html', {'persons': persons, 'personss':personss, 'notablepersons':notablepersons, })
def expedition(request, expeditionname):
year = int(expeditionname)
@@ -30,22 +34,28 @@ def expedition(request, expeditionname):
message = LoadLogbookForExpedition(expedition)
#message = str(GetPersonExpeditionNameLookup(expedition).keys())
logbookentries = expedition.logbookentry_set.order_by('date')
- return render_to_response('expedition.html', {'expedition': expedition, 'expedition_next':expedition_next, 'expedition_prev':expedition_prev, 'logbookentries':logbookentries, 'message':message, 'settings': settings})
+ return render_response(request,'expedition.html', {'expedition': expedition, 'expedition_next':expedition_next, 'expedition_prev':expedition_prev, 'logbookentries':logbookentries, 'message':message, })
+
+def person(request, first_name='', last_name=''):
+ person = Person.objects.get(first_name = first_name, last_name = last_name)
+ return render_response(request,'person.html', {'person': person, })
+
+ def get_absolute_url(self):
+ return settings.URL_ROOT + self.first_name + '_' + self.last_name
-def person(request, name):
- person = Person.objects.get(href=name)
- return render_to_response('person.html', {'person': person, 'settings': settings})
+#def person(request, name):
+# person = Person.objects.get(href=name)
+#
-def personexpedition(request, name, expeditionname):
- person = Person.objects.get(href=name)
- year = int(expeditionname)
+def personexpedition(request, first_name='', last_name='', year=''):
+ person = Person.objects.get(first_name = first_name, last_name = last_name)
expedition = Expedition.objects.get(year=year)
personexpedition = person.personexpedition_set.get(expedition=expedition)
- return render_to_response('personexpedition.html', {'personexpedition': personexpedition, 'settings': settings})
+ return render_response(request,'personexpedition.html', {'personexpedition': personexpedition, })
-def logbookentry(request, logbookentry_id):
- logbookentry = LogbookEntry.objects.filter(href = logbookentry_id)[0]
- return render_to_response('logbookentry.html', {'logbookentry': logbookentry, 'settings': settings})
+def logbookentry(request, logbookentry_pk):
+ logbookentry = LogbookEntry.objects.get(pk = logbookentry_pk)
+ return render_response(request, 'logbookentry.html', {'logbookentry': logbookentry, })
def logbookSearch(request, extra):
query_string = ''
@@ -55,11 +65,11 @@ def logbookSearch(request, extra):
entry_query = search.get_query(query_string, ['text','title',])
found_entries = LogbookEntry.objects.filter(entry_query)
- return render_to_response('logbooksearch.html',
- { 'query_string': query_string, 'found_entries': found_entries, 'settings': settings})
+ return render_response(request,'logbooksearch.html',
+ { 'query_string': query_string, 'found_entries': found_entries, })
#context_instance=RequestContext(request))
def personForm(request,pk):
person=Person.objects.get(pk=pk)
form=PersonForm(instance=person)
- return render_to_response('personform.html', {'form':form,'settings':settings}) \ No newline at end of file
+ return render_response(request,'personform.html', {'form':form,}) \ No newline at end of file
diff --git a/expo/views_other.py b/expo/views_other.py
index e413297..d890a6e 100644
--- a/expo/views_other.py
+++ b/expo/views_other.py
@@ -1,4 +1,3 @@
-from django.shortcuts import render_to_response
from troggle.expo.models import Cave, Expedition, Person, LogbookEntry, PersonExpedition
import troggle.settings as settings
from django import forms
@@ -9,6 +8,7 @@ from troggle.parsers.survex import LoadAllSurvexBlocks
import randSent
from django.core.urlresolvers import reverse
+from troggle.alwaysUseRequestContext import render_response # see views_logbooks for explanation on this.
def stats(request):
statsDict={}
@@ -16,7 +16,7 @@ def stats(request):
statsDict['caveCount'] = int(Cave.objects.count())
statsDict['personCount'] = int(Person.objects.count())
statsDict['logbookEntryCount'] = int(LogbookEntry.objects.count())
- return render_to_response('statistics.html', statsDict)
+ return render_response(request,'statistics.html', statsDict)
def frontpage(request):
message = "no test message" #reverse('personn', kwargs={"name":"hkjhjh"})
@@ -29,7 +29,7 @@ def frontpage(request):
#'randSent':randSent.randomLogbookSentence(),
expeditions = Expedition.objects.order_by("-year")
- return render_to_response('index.html', {'expeditions':expeditions, 'settings':settings, 'all':'all', "message":message})
+ return render_response(request,'index.html', {'expeditions':expeditions, 'all':'all', "message":message})
def calendar(request,year):
week=['S','S','M','T','W','T','F']
@@ -37,6 +37,4 @@ def calendar(request,year):
expedition=Expedition.objects.get(year=year)
PersonExpeditions=expedition.personexpedition_set.all()
- dictToPass=locals()
- dictToPass.update({'settings':settings})
- return render_to_response('calendar.html', dictToPass)
+ return render_response(request,'calendar.html', locals())