diff options
author | Philip Sargent <philip.sargent@klebos.com> | 2022-03-18 20:00:15 +0000 |
---|---|---|
committer | Philip Sargent <philip.sargent@klebos.com> | 2022-03-18 20:00:15 +0000 |
commit | 6a18511dd0aaa514ef480cc626f60765b76d58dd (patch) | |
tree | c0f107e7e29818248284649f7cc26f62b9076a4b /core/views/caves.py | |
parent | 6f32364675fa413db942486d8efccd4d0990e274 (diff) | |
download | troggle-6a18511dd0aaa514ef480cc626f60765b76d58dd.tar.gz troggle-6a18511dd0aaa514ef480cc626f60765b76d58dd.tar.bz2 troggle-6a18511dd0aaa514ef480cc626f60765b76d58dd.zip |
Fixing URLs for cave descriptions
Diffstat (limited to 'core/views/caves.py')
-rw-r--r-- | core/views/caves.py | 115 |
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) |