我想做什么: 从HTML表单获取用户输入,将输入存储在Django中的变量中,然后使用变量执行计算。
为此,我使用以下代码:
my_var = requst.POST.get('my_var')
为防止在第一次呈现Django页面时将'None'
存储在'my_var'
中,我通常使用
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视图时,事情就不再那么好了。代码如下:
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)
结果:页面仅使用第一个词典条目进行呈现。所有其他人都被排除在外。在这种情况下,只有car_manufacturer
会呈现到html页。
答案 0 :(得分:1)
对不起,当我审阅我的帖子时,我意识到,我对最后一部分的缩进有很大的了解:
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)`
由于我不想浪费我写这篇文章的时间-即使我自己发现了错误,我还是只是张贴了这篇文章。
在编程方面的新手经验教训:
也许其他人会从中受益。