75 lines
2.8 KiB
Python
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) |