diff options
author | Philip Sargent <philip.sargent@gmail.com> | 2023-09-30 22:09:18 +0300 |
---|---|---|
committer | Philip Sargent <philip.sargent@gmail.com> | 2023-09-30 22:09:18 +0300 |
commit | c88415688955041677f9951adb046a4c6008c3c2 (patch) | |
tree | 4749f202c3cd5555160c2492956bec3e58b7ee53 | |
parent | 8dcae6437e354b2e44064692289b88c9d9a90ad1 (diff) | |
download | troggle-c88415688955041677f9951adb046a4c6008c3c2.tar.gz troggle-c88415688955041677f9951adb046a4c6008c3c2.tar.bz2 troggle-c88415688955041677f9951adb046a4c6008c3c2.zip |
fixed duplicate paths to same page
-rw-r--r-- | core/views/caves.py | 35 | ||||
-rw-r--r-- | urls.py | 8 |
2 files changed, 27 insertions, 16 deletions
diff --git a/core/views/caves.py b/core/views/caves.py index a6c9659..e8db577 100644 --- a/core/views/caves.py +++ b/core/views/caves.py @@ -10,7 +10,7 @@ from pathlib import Path from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.http import HttpResponse, HttpResponseNotFound, HttpResponseRedirect, FileResponse -from django.shortcuts import render +from django.shortcuts import render, redirect from django.urls import NoReverseMatch, reverse import troggle.settings as settings @@ -289,9 +289,27 @@ def rendercave(request, cave, slug, cave_id=""): request, templatefile, context ) # crashes here with NoReverseMatch if url not set up for 'edit_cave' in urls.py return r + +def cavepagefwd(request, karea=None, subpath=None): + """archaic, just send to the caves list page + """ + return redirect("/caves") - -def cavepage(request, karea=None, subpath=None, slug=None): +def caveslugfwd(request, slug): + """This is ass backwards. It would be better style to have the slug-identified request be the master, and have + other paths redirect to it, rather than what we have here. + Pending a change where we remove cave.url as a field and have an explicit fixed convention instead. + """ + if slug: + Gcavelookup = GetCaveLookup() + if slug in Gcavelookup: + cave = Gcavelookup[slug] + else: + message = f"Failed to find cave from identifier given: {slug}." + return render(request, "errors/generic.html", {"message": message}) + return redirect(f"/{cave.url}") + +def cavepage(request, karea=None, subpath=None): """Displays a cave description page accessed by kataster area number specifically OR @@ -306,16 +324,9 @@ def cavepage(request, karea=None, subpath=None, slug=None): There are also A LOT OF URLS to e.g. /1623/161/l/rl89a.htm which are IMAGES and real html files in cave descriptions. These need to be handled HERE too (accident of history). """ - if slug: - Gcavelookup = GetCaveLookup() - if slug in Gcavelookup: - cave = Gcavelookup[slug] - return rendercave(request, cave, slug) - else: - message = f"Failed to find cave from identifier given: {slug}." - return render(request, "errors/generic.html", {"message": message}) - + # lack of validation for karea, it could be any 4 digits. + # subpath has an initial / kpath = karea + subpath # print(f" ! cavepage:'{kpath}' kataster area:'{karea}' rest of path:'{subpath}'") try: @@ -7,7 +7,7 @@ from django.conf.urls.static import static from troggle.core.views import statistics, survex from troggle.core.views.auth import expologin, expologout from troggle.core.views.caves import (cave3d, caveindex, entranceindex, - cavepage, caveQMs, edit_cave, cave_debug, + cavepage, caveslugfwd, cavepagefwd, caveQMs, edit_cave, cave_debug, edit_entrance, get_entrances, qm, expo_kml, expo_kmz) from troggle.core.views.drawings import dwgallfiles, dwgfilesingle from troggle.core.views.editor_helpers import image_selector, new_image_form @@ -142,7 +142,7 @@ trogglepatterns = [ re_path(r'^getEntrances/(?P<caveslug>.*)', get_entrances, name = "get_entrances"), # used internally ? # Cave description pages - path('cave/<slug:slug>', cavepage, name="cavepage"), + path('cave/<slug:slug>', caveslugfwd, name="caveslugfwd"), path('cave_debug', cave_debug, name="cave_debug"), re_path(r'^newcave/$', edit_cave, name="newcave"), re_path(r'^cave/3d/(?P<cave_id>[^/]+).3d$', cave3d, name="cave3d"), @@ -162,8 +162,8 @@ trogglepatterns = [ # Note that _edit$ for a cave description page in a subfolder e.g. /1623/204/204.html_edit gets caught here and breaks with 404 # These re-enable archaic URLs which are in old web pages which are still public on other servers - path('smkridge/<path:subpath>', cavepage, {'karea': "1623/"}, name="cavepage"), - path('expo/smkridge/<path:subpath>', cavepage, {'karea': "1623/"}, name="cavepage"), + path('smkridge/<path:subpath>', cavepagefwd, {'karea': "1623"}, name="cavepagefwd"), + path('expo/smkridge/<path:subpath>', cavepagefwd, {'karea': "1623"}, name="cavepagefwd"), # Archaic, kept. This /expo/ prefix only works for expoweb HTML pages not troggle pages path('expo/<path:path>', expopage, name="expopage"), |