35777-vm/core/views.py
2025-11-16 18:04:45 +00:00

75 lines
2.8 KiB
Python

from django.shortcuts import render
from django.views import View
class IndexView(View):
def get(self, request, *args, **kwargs):
# For now, units are hardcoded. This will be moved to the database later.
units = {
'Length': ['meters', 'feet', 'inches'],
'Mass': ['kilograms', 'pounds', 'ounces'],
'Temperature': ['Celsius', 'Fahrenheit', 'Kelvin']
}
context = {
'units': units,
'page_title': 'Engineering Unit Converter',
}
return render(request, 'core/index.html', context)
def post(self, request, *args, **kwargs):
# Hardcoded units and conversion factors for the first iteration
units = {
'Length': ['meters', 'feet', 'inches'],
'Mass': ['kilograms', 'pounds', 'ounces'],
'Temperature': ['Celsius', 'Fahrenheit', 'Kelvin']
}
value_in = request.POST.get('value_in')
unit_in = request.POST.get('unit_in')
unit_out = request.POST.get('unit_out')
result = None
error = None
try:
value_in_float = float(value_in)
# Basic, non-comprehensive conversion logic
# This should be replaced with a more robust library or model-driven approach
# Length
if unit_in == 'meters' and unit_out == 'feet':
result = value_in_float * 3.28084
elif unit_in == 'feet' and unit_out == 'meters':
result = value_in_float / 3.28084
# Mass
elif unit_in == 'kilograms' and unit_out == 'pounds':
result = value_in_float * 2.20462
elif unit_in == 'pounds' and unit_out == 'kilograms':
result = value_in_float / 2.20462
# Temperature
elif unit_in == 'Celsius' and unit_out == 'Fahrenheit':
result = (value_in_float * 9/5) + 32
elif unit_in == 'Fahrenheit' and unit_out == 'Celsius':
result = (value_in_float - 32) * 5/9
elif unit_in == unit_out:
result = value_in_float
else:
# Placeholder for conversions not yet implemented
error = f"Conversion from {unit_in} to {unit_out} is not yet supported."
except (ValueError, TypeError):
error = "Invalid input value. Please enter a number."
context = {
'units': units,
'result': round(result, 4) if result is not None else None,
'error': error,
'value_in': value_in,
'unit_in': unit_in,
'unit_out': unit_out,
'page_title': 'Engineering Unit Converter',
}
return render(request, 'core/index.html', context)