Search code examples
pythonhtmldjangoacronym

How to make my code insensitive to acronyms


I'm creating a website that shows available carparks in each college campus. How do I make the code insensitive to acronyms, e.g.g if the name of the campus is DCU Alpha?

carparks.html

<h2>
{% if campus %}
{{ campus }}
{% else %}
No such campus
{% endif %}
</h2>
{% if campus %}
{% if carparks %}
<ul>
{% for carpark in carparks %}
<li>{{carpark.name}}: {{carpark.spaces}} spaces, {{carpark.disabled_spaces}} spaces for people with disabilities
  <br>Spaces available:  {{ carpark.spaces_available }}<br><br>
</li>
{% endfor %}
</ul>
{% else %}
<p>No carparks found</p>
{% endif %}
{% endif %}

views.py

def carparks(request):
    context = {}
    Base_URL = 'http://jfoster.pythonanywhere.com/carparks/'
    campus_name = request.GET['campus']
    try:
       campus = Campus.objects.get(name__iexact=campus_name)
    except Campus.DoesNotExist:
       return render(request,"parkatdcu/carparks.html",context)
    carparks = Carpark.objects.filter(campus_id=campus)
    carpark_info = []
    for carpark in carparks:
        URL = Base_URL + carpark.name
        r = requests.get(URL).json()
        if 'spaces_available' in r:
            spaces_available = r['spaces_available']
        else:
            spaces_available = 'not available'
        carpark_info.append({
                         'name': carpark.name,
                         'spaces': carpark.spaces,
                         'disabled_spaces': carpark.disabled_spaces,
                         'spaces_available': spaces_available
                         }
                        )
        context['campus'] = campus_name.title()
        context['carparks'] = carpark_info
        return render(request,"parkatdcu/carparks.html",context)

Solution

  • Original Answer: String Manipulation

    You can force uppercase strings in python / javascript like so:

    python

    # becomes DCU ALPHA
    'dcu alpha'.upper()
     
    # becomes Dcu Alpha
    'dcu alpha'.capitalize()
    
    # becomes DCU Alpha: 
    'dcu alpha'.split(' ')[0].upper() + ' ' + 'dcu alpha'.split(' ')[1].captialize()
    

    javascript

    // becomes DCU ALPHA:
    'dcu alpha'.toUpperCase()
    
    // becomes DCU Alpha:
    'dcu alpha'.slice(0, 5).toUpperCase() + 'dcu alpha'.slice(5,)
    

    EDIT: Conditional Formatting:

    Let's assume we have campus names like so:

    campuses = ['dcu alpha', 'northridge', 'lsu univiersity', 'princeton', ...]
    

    We can add some logic to check for campuses's with acrononyms:

    views.py

    # check if a campus contains two words:
    if len(campus_name.split(' ')) > 1: 
        # campus name has at least two words
    else: 
        # campus name has only one word
    

    We can also create two lists, one with campus names that have acronyms and one with campus names that do not:

    # set two lists:
    campuses_with_acronyms = ['dcu alpha', 'lsu univiersity', ...]
    campuses_without_acronyms = ['northride', 'princeton', ...]
    
    # check if the campus name is in either list:
    if campus_name in campuses_with_acronyms:
        # campus name has an acronym
    else:
        # campus name does not have an acronym