summaryrefslogtreecommitdiffstats
path: root/core/views/caves.py
diff options
context:
space:
mode:
authorMartin Green <martin.speleo@gmail.com>2022-06-23 19:02:10 +0100
committerMartin Green <martin.speleo@gmail.com>2022-06-23 19:02:10 +0100
commit2f42f488abedd93f06074d9d28582b111777135e (patch)
tree06ce347088253fe8ac7f8375cae75c511ae70b11 /core/views/caves.py
parentf1e800d8bf4ff389cecc34f494e87604cd4fd7ac (diff)
parent16c6aed65fa65d0b13ff134d2be172ab0448a508 (diff)
downloadtroggle-2f42f488abedd93f06074d9d28582b111777135e.tar.gz
troggle-2f42f488abedd93f06074d9d28582b111777135e.tar.bz2
troggle-2f42f488abedd93f06074d9d28582b111777135e.zip
Merge branch 'python3-new' of ssh://expo.survex.com/home/expo/troggle into python3-new
Diffstat (limited to 'core/views/caves.py')
-rw-r--r--core/views/caves.py25
1 files changed, 16 insertions, 9 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index 7217261..8df801b 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -12,6 +12,7 @@ from django.urls import reverse
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
from django.shortcuts import get_object_or_404, render
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
+from django.urls import NoReverseMatch
import troggle.settings as settings
from troggle.core.views import expo
@@ -235,11 +236,13 @@ def rendercave(request, cave, slug, cave_id=''):
editable = False
if not cave_id:
cave_id = slug # cave.unofficial_number
- try:
- context = {'cave_editable': editable, 'settings': settings, 'cave': cave, 'cavepage': True,
+ context = {'cave_editable': editable, 'settings': settings, 'cave': cave, 'cavepage': True,
'cave_id': cave_id, 'svxstem': str(svxstem), 'svx3d':svx3d}
- r = render(request, templatefile, context) # crashes here if url not set up for 'edit_cave' in urls.py
+ try:
+ r = render(request, templatefile, context) # crashes here with NoReverseMatch if url not set up for 'edit_cave' in urls.py
return r
+ except NoReverseMatch:
+ raise
except:
message = f'Failed to render cave: {slug}'
return render(request,'errors/generic.html', {'message': message})
@@ -261,23 +264,27 @@ def cavepage(request, karea, subpath):
try:
cave = Cave.objects.get(url = kpath) # ideally this will be unique
- # print(f" ! cavepage: url={kpath} -- {cave}")
- r = rendercave(request, cave, cave.slug())
- return r
-
except Cave.DoesNotExist:
# probably a link to text or an image e.g. 1623/161/l/rl89a.htm i.e. an expoweb page
# cannot assume that this is a simple cave page, for a cave we don't know.
+ # print(f" ! cavepage: url={kpath} A cave of this name does not exist")
return expo.expopage(request, kpath)
except Cave.MultipleObjectsReturned:
caves = Cave.objects.filter(url = kpath)
+ # print(f" ! cavepage: url={kpath} multiple caves exist")
# we should have a -several variant for the cave pages, not just the svxcaves:
return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
+
+ try:
+ r = rendercave(request, cave, cave.slug())
+ return r
+ except NoReverseMatch:
+ raise
except:
- message = f'Failed to find cave: {kpath}'
+ message = f'Failed to render cave: {kpath} (it does exist and is unique) because of a Django URL resolution error. Check urls.py.'
return render(request,'errors/generic.html', {'message': message})
- return rendercave(request, cave, cave.slug(), cave_id=cave_id)
+ # return rendercave(request, cave, cave.slug(), cave_id=cave_id)
def caveEntrance(request, slug):
try: