Цикл по списку для хранения переменных в словаре запускается с ошибкой - PullRequest
0 голосов
/ 05 января 2019

Что я хочу сделать: Получите пользовательский ввод из формы HTML, сохраните входные данные в переменных в Django и выполните вычисления с переменными.

Для этого я использую следующий код:

my_var = requst.POST.get('my_var')

Чтобы предотвратить сохранение 'None' в 'my_var' при первом отображении страницы Django, я обычно использую if my_var == None: my_var = 1

Для простоты использования группы переменных мне пришла в голову следующая идея:

  1. Я храню все имена переменных в списке
  2. Я перебираю список и создаю словарь с именами переменных в качестве ключа и пользовательским вводом в качестве значения

Для этого я написал этот код на 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.

1 Ответ

0 голосов
/ 05 января 2019

Извините, ребята, - когда я просматривал свой пост, я понял, что у меня была серьезная ошибка в отступе последней части: context и return оба были частью цикла for, что, очевидно, привело к визуализации страницы после первого цикла. Я исправил код следующим образом:

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)`

Так как я не хотел, чтобы время, потраченное на написание этого поста, было потрачено впустую - я просто отправил его в любом случае - даже несмотря на то, что сам нашел ошибку.

Уроки для новичка в программировании:

  1. Много комментариев в вашем собственном коде может привести к большой путанице
  2. Постарайтесь быть точным и держите код в чистоте и порядке
  3. Делайте 1 и 2 перед записью длинных постов в stackoverflow

Может быть, кто-то еще выиграет от этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...