diff options
author | Philip Sargent <philip.sargent@gmail.com> | 2023-09-29 22:00:10 +0300 |
---|---|---|
committer | Philip Sargent <philip.sargent@gmail.com> | 2023-09-29 22:00:10 +0300 |
commit | 904b6309cf131ee6fc7e2ea8ae04f27da377f66a (patch) | |
tree | 04e878ef3056850ed48961b06b1948c4445b7f82 /core/views/logbooks.py | |
parent | a67a97b9fc98cfc9a74db3e3bead4565f277f4b7 (diff) | |
download | troggle-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.py | 31 |
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="", |