forked from expo/troggle
Intercept NoReverseMatch eceptions more helpfully
This commit is contained in:
parent
4fa8d18621
commit
77cf3455a6
@ -12,6 +12,7 @@ from django.urls import reverse
|
|||||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
|
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
|
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
|
||||||
|
from django.urls import NoReverseMatch
|
||||||
|
|
||||||
import troggle.settings as settings
|
import troggle.settings as settings
|
||||||
from troggle.core.views import expo
|
from troggle.core.views import expo
|
||||||
@ -235,11 +236,13 @@ def rendercave(request, cave, slug, cave_id=''):
|
|||||||
editable = False
|
editable = False
|
||||||
if not cave_id:
|
if not cave_id:
|
||||||
cave_id = slug # cave.unofficial_number
|
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}
|
'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
|
return r
|
||||||
|
except NoReverseMatch:
|
||||||
|
raise
|
||||||
except:
|
except:
|
||||||
message = f'Failed to render cave: {slug}'
|
message = f'Failed to render cave: {slug}'
|
||||||
return render(request,'errors/generic.html', {'message': message})
|
return render(request,'errors/generic.html', {'message': message})
|
||||||
@ -259,9 +262,9 @@ def cavepage(request, karea, subpath):
|
|||||||
kpath = karea + subpath
|
kpath = karea + subpath
|
||||||
# print(f" ! cavepage:'{kpath}' kataster area:'{karea}' rest of path:'{subpath}'")
|
# print(f" ! cavepage:'{kpath}' kataster area:'{karea}' rest of path:'{subpath}'")
|
||||||
|
|
||||||
try:
|
|
||||||
cave = Cave.objects.get(url = kpath) # ideally this will be unique
|
cave = Cave.objects.get(url = kpath) # ideally this will be unique
|
||||||
# print(f" ! cavepage: url={kpath} -- {cave}")
|
print(f" ! cavepage: url={kpath} -- {cave}")
|
||||||
|
try:
|
||||||
r = rendercave(request, cave, cave.slug())
|
r = rendercave(request, cave, cave.slug())
|
||||||
return r
|
return r
|
||||||
|
|
||||||
@ -273,8 +276,10 @@ def cavepage(request, karea, subpath):
|
|||||||
caves = Cave.objects.filter(url = kpath)
|
caves = Cave.objects.filter(url = kpath)
|
||||||
# we should have a -several variant for the cave pages, not just the svxcaves:
|
# we should have a -several variant for the cave pages, not just the svxcaves:
|
||||||
return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
|
return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
|
||||||
|
except NoReverseMatch:
|
||||||
|
raise
|
||||||
except:
|
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 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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user