summaryrefslogtreecommitdiffstats
path: root/core/views/caves.py
diff options
context:
space:
mode:
Diffstat (limited to 'core/views/caves.py')
-rw-r--r--core/views/caves.py115
1 files changed, 63 insertions, 52 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index 4956004..9e40c51 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -211,17 +211,21 @@ def rendercave(request, cave, slug, cave_id=''):
'''Gets the data and files ready and then triggers Django to render the template.
The resulting html contains urls which are dispatched independently, e.g. the 'download' link
'''
- #print(" ! rendercave:'{}' slug:'{}' cave_id:'{}'".format(cave, slug, cave_id))
+ # print(" ! rendercave:'{}' START slug:'{}' cave_id:'{}'".format(cave, slug, cave_id))
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
return render(request, 'nonpublic.html', {'instance': cave, 'cavepage': True, 'cave_id': cave_id})
else:
- svxstem = Path(cave.survex_file).parent / Path(cave.survex_file).stem
- svx3d = Path(cave.survex_file).stem
-
+ # print(f" ! rendercave: slug:'{slug}' survex file:'{cave.survex_file}'")
+ try:
+ svx3d = Path(cave.survex_file).stem
+ svxstem = Path(settings.SURVEX_DATA) / Path(cave.survex_file)
+ # print(f" ! rendercave: slug:'{slug}' '' ++ '{svxstem}'")
+ except:
+ print(f" ! rendercave: slug:'{slug}' FAIL TO MANAGE survex file:'{cave.survex_file}'")
# NOTE the template itself loads the 3d file using javascript before it loads anything else.
# Django cannot see what this javascript is doing, so we need to ensure that the 3d file exists first.
- # So only do this render if a valid .3d file exists. TO BE DONE
+ # So only do this render if a valid .3d file exists. TO BE DONE -Not yet as CaveView is currently disabled
# see design docum in troggle/templates/cave.html
# see rendercave() in troggle/core/views/caves.py
templatefile = 'cave.html'
@@ -229,40 +233,47 @@ def rendercave(request, cave, slug, cave_id=''):
editable = True
else:
editable = False
- #print(f" ! rendercave:'{cave}' using template '{templatefile}' svxstem:'{svxstem}' caveid:'{cave_id}' svx3d:'{svx3d}'")
if not cave_id:
cave_id = slug # cave.unofficial_number
try:
- r = render(request,templatefile, {'cave_editable': editable, 'settings': settings, 'cave': cave, 'cavepage': True,
- 'cave_id': cave_id, 'svxstem': svxstem, 'svx3d':svx3d})
+ 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
return r
except:
- raise
-
+ message = f'Failed to render cave: {slug}'
+ return render(request,'errors/generic.html', {'message': message})
def cavepage(request, karea, subpath):
'''Displays a cave description page
accessed by kataster area number specifically
+ OR
+ accessed by cave.url specifically set in data, e.g.
+ "1623/000/000.html" <= cave-data/1623-000.html
+ "1623/41/115.htm" <= cave-data/1623-115.html
+ so we have to query the database to fine the URL as we cannot rely on the url actually telling us the cave by inspection.
There are A LOT OF URLS to e.g. /1623/161/l/rl89a.htm which are IMAGES and html files
in cave descriptions. These need to be handled HERE
'''
- path = karea + subpath
- #print(" ! cavepage:'{}' kataster area:'{}' rest of path:'{}'".format(path, karea, subpath))
+ kpath = karea + subpath
+ # print(f" ! cavepage:'{kpath}' kataster area:'{karea}' rest of path:'{subpath}'")
try:
- cave = Cave.objects.get(url = path) # ideally this will be unique
- return rendercave(request, cave, cave.slug())
+ 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
- return expo.expopage(request, path)
+ return expo.expopage(request, str(kpath))
except Cave.MultipleObjectsReturned:
- caves = Cave.objects.filter(url = path)
+ caves = Cave.objects.filter(url = kpath)
# we should have a -several variant for the cave pages, not just the svxcaves:
return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
except:
- message = f'Failed to find cave: {path}'
+ message = f'Failed to find cave: {kpath}'
return render(request,'errors/generic.html', {'message': message})
def cave(request, cave_id='', offical_name=''):
@@ -292,27 +303,16 @@ def caveEntrance(request, slug):
else:
return render(request,'cave_entrances.html', {'cave': cave})
-def caveDescription(request, slug):
- try:
- cave = Cave.objects.get(caveslug__slug = slug)
- except:
- return render(request,'errors/badslug.html', {'badslug': slug})
+# def caveDescription(request, slug):
+ # try:
+ # cave = Cave.objects.get(caveslug__slug = slug)
+ # except:
+ # return render(request,'errors/badslug.html', {'badslug': slug})
- if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
- return render(request,'nonpublic.html', {'instance': cave})
- else:
- return render(request,'cave_uground_description.html', {'cave': cave})
-
-def caveQMs(request, slug):
- try:
- cave = Cave.objects.get(caveslug__slug = slug)
- except:
- return render(request,'errors/badslug.html', {'badslug': slug})
-
- if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
- return render(request,'nonpublic.html', {'instance': cave})
- else:
- return render(request,'cave_qms.html', {'cave': cave})
+ # if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
+ # return render(request,'nonpublic.html', {'instance': cave})
+ # else:
+ # return render(request,'cave_uground_description.html', {'cave': cave})
@login_required_if_public
def edit_cave(request, slug=None):
@@ -456,21 +456,6 @@ def edit_entrance(request, caveslug=None, slug=None):
'entletter': entletter
})
-def qm(request,cave_id,qm_id,year,grade=None):
- year=int(year)
- try:
- qm=getCave(cave_id).get_QMs().get(number=qm_id,found_by__date__year=year)
- return render(request,'qm.html',locals())
- except Cave.MultipleObjectsReturned: # entirely the wrong action, REPLACE with the right display
- caves = Cave.objects.filter(kataster_number=cave_id)
- return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
-
- except QM.DoesNotExist:
- url=urllib.parse.urljoin(settings.URL_ROOT, r'/admin/core/qm/add/'+'?'+ r'number=' + qm_id)
- if grade:
- url += r'&grade=' + grade
- return HttpResponseRedirect(url)
-
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]
@@ -497,6 +482,32 @@ def get_entrances(request, caveslug):
return render(request,'errors/badslug.html', {'badslug': caveslug})
return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
+def caveQMs(request, slug):
+ try:
+ cave = Cave.objects.get(caveslug__slug = slug)
+ except:
+ return render(request,'errors/badslug.html', {'badslug': slug})
+
+ if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
+ return render(request,'nonpublic.html', {'instance': cave})
+ else:
+ return render(request,'cave_qms.html', {'cave': cave})
+
+def qm(request,cave_id,qm_id,year,grade=None):
+ year=int(year)
+ try:
+ qm=getCave(cave_id).get_QMs().get(number=qm_id,found_by__date__year=year)
+ return render(request,'qm.html',locals())
+ except Cave.MultipleObjectsReturned: # entirely the wrong action, REPLACE with the right display
+ caves = Cave.objects.filter(kataster_number=cave_id)
+ return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
+
+ except QM.DoesNotExist:
+ url=urllib.parse.urljoin(settings.URL_ROOT, r'/admin/core/qm/add/'+'?'+ r'number=' + qm_id)
+ if grade:
+ url += r'&grade=' + grade
+ return HttpResponseRedirect(url)
+
def get_qms(request, caveslug):
try:
cave = Cave.objects.get(caveslug__slug = caveslug)