summaryrefslogtreecommitdiffstats
path: root/core/views/logbooks.py
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@gmail.com>2023-09-29 22:00:10 +0300
committerPhilip Sargent <philip.sargent@gmail.com>2023-09-29 22:00:10 +0300
commit904b6309cf131ee6fc7e2ea8ae04f27da377f66a (patch)
tree04e878ef3056850ed48961b06b1948c4445b7f82 /core/views/logbooks.py
parenta67a97b9fc98cfc9a74db3e3bead4565f277f4b7 (diff)
downloadtroggle-904b6309cf131ee6fc7e2ea8ae04f27da377f66a.tar.gz
troggle-904b6309cf131ee6fc7e2ea8ae04f27da377f66a.tar.bz2
troggle-904b6309cf131ee6fc7e2ea8ae04f27da377f66a.zip
First attempts at reforming the FirstnameSurname parsing
Diffstat (limited to 'core/views/logbooks.py')
-rw-r--r--core/views/logbooks.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/core/views/logbooks.py b/core/views/logbooks.py
index 09cd6b4..7f435b3 100644
--- a/core/views/logbooks.py
+++ b/core/views/logbooks.py
@@ -1,3 +1,5 @@
+import re
+
from django.db.models import Q
from django.shortcuts import render
from django.views.generic.list import ListView
@@ -151,6 +153,35 @@ class QMs_jsonListView(ListView):
template_name = "core/QMs_json_list.html"
model = QM
+rx_person = re.compile(r"(?i)^(([A-Z]*[a-z\-\'&;]*)[^a-zA-Z]*)([a-z\-\']*[^a-zA-Z]*[\-]*[A-Z]*[a-zA-Z\-&;]*)$")
+rx_simple_person = re.compile(r"^([A-Z][a-z]*)[ ]*([A-Z][a-z]*)$")
+
+def better_person(request, name=""):
+ """Attempting to replace the name parser in urls.py with a more complex but
+ more understandable one in the body of the code.
+ Unfortuantely the get_absolute_url Django funny is making life very difficult.
+ This is in models/troggle.py PersonExpedition and Person
+ We need a defined slug for a person, however complicated their name, before we can progress further, if we
+ insist on using get_absolute_url().
+
+ Probably simpler and clearer to maintainers NOT to use ANY get_absolute_url() in the templates.
+ """
+ names = rx_simple_person.match(name.strip(" /"))
+ if names:
+ first_name = names.group(1)
+ last_name = names.group(2)
+ else:
+ message = f"Name not recognised '{name}' - possibly French? (See our <a href=\"/handbook/troggle/namesredesign.html\">Proposal to fix this</a>)"
+ return render(request, "errors/generic.html", {"message": message})
+
+ try:
+ this_person = Person.objects.get(first_name=first_name, last_name=last_name)
+ except:
+ message = f"Person not found {name} => '{first_name} {last_name}' - possibly Scottish? (See our <a href=\"/handbook/troggle/namesredesign.html\">Proposal to fix this</a>)"
+ return render(request, "errors/generic.html", {"message": message})
+
+ return render(request, "person.html", {"person": this_person})
+
def person(
request,
first_name="",