Что я хочу сделать:
Получите пользовательский ввод из формы HTML, сохраните входные данные в переменных в Django и выполните вычисления с переменными.
Для этого я использую следующий код:
my_var = requst.POST.get('my_var')
Чтобы предотвратить сохранение 'None'
в 'my_var'
при первом отображении страницы Django, я обычно использую
if my_var == None:
my_var = 1
Для простоты использования группы переменных мне пришла в голову следующая идея:
- Я храню все имена переменных в списке
- Я перебираю список и создаю словарь с именами переменных в качестве ключа и пользовательским вводом в качестве значения
Для этого я написал этот код на python, который прекрасно работает:
list_eCar_properties = [
'car_manufacturer',
'car_model',
'car_consumption',]
dict_sample_eCar = {
'car_manufacturer' : "Supr-Duper",
'car_model' : "Lightning 1000",
'car_consumption' : 15.8,
}
dict_user_eCar = {
}
my_dict = {
'car_manufacturer' : None,
'car_model' : None,
'car_consumption' : None,
}
for item in list_eCar_properties:
if my_dict[item] == None:
dict_user_eCar[item] = dict_sample_eCar[item]
else:
dict_user_eCar[item] = my_dict[item]
print(dict_user_eCar)
Отлично работает - когда я запускаю код, создается словарь (dict_user_eCar), в котором хранится пользовательский ввод (в данном случае None
, имитируемый с помощью второго словаря my_dict
). Когда пользователь оставляет ввод пустым - используются данные из dict_sample_eCar.
Теперь, когда я передаю этот код в мой Django view, вещи перестают работать так же приятно. Код следующий:
def Verbrauchsrechner_eAuto(request):
list_eCar_properties = [
'car_manufacturer',
'car_model',
'car_consumption',
]
dict_model_eCar = {
'car_manufacturer' : "Supr-Duper",
'car_model' : "Lightning 1000",
'car_consumption' : 15.8,
}
dict_user_eCar = {
}
for item in list_eCar_properties:
dict_user_eCar[item] = dict_model_eCar[item]
context = {
'dict_user_eCar' : dict_user_eCar,
'dict_model_eCar' : dict_model_eCar,
'list_eCar_properties' : list_eCar_properties,
}
return render(request, 'eAuto/Verbrauchsrechner_eAuto.html', context = context)
Результат: страница отображается только с первой словарной записью. Все остальные не учтены. В этом случае на html-страницу выводится только car_manufacturer
.