我试图从表单中显示数字的乘法表。这是我的模板。
<form method="post" action="/home/result/">
<p>Enter your name</p>
<p><input type="text" name="nombre"></p>
<p>Enter you last name</p>
<p><input type="text" name="apellido"></p>
<p>Enter number for the table of that number</p>
<p><input type="number" name="table1"></p>
<p><input type="submit" name="Submit"></p>
</form>
现在,这是我的观点
@csrf_exempt
def get_name(request):
numbers = []
if request.method == 'POST':
nombre = request.POST.get('nombre')
apellido = request.POST.get('apellido')
table = request.POST.get('table1')
for i in range(1, 13):
numbers.append(i*table)
context = {
'nombre': nombre,
'apellido': apellido,
'numbers': numbers
}
template = loader.get_template('home/result.html')
return HttpResponse(template.render(context, request))
else:
template = loader.get_template('home/nombre.html')
return HttpResponse(template.render())
这是我的另一个观点,result.html
<p>Hello {{ nombre }} {{ apellido }}</p>
{% for number in numbers %}
{{ number }}<br />
{% endfor %}
所以,我输入6,这就是我所看到的。我在终端上尝试了这个,我得到了正确的结果。这有什么不对?
6
66
666
6666
66666
666666
6666666
66666666
666666666
6666666666
66666666666
666666666666
答案 0 :(得分:3)
你在这里遇到的问题是你传递给视图的'6'实际上是一个字符串。所以当你乘以它时,你正在执行字符串乘法,它只重复字符串。
要解决此问题,您必须通过执行<CustButton@Button>:
font_size: 28
<DemoGridLayout>:
id:test
display:entry
rows:3
cols:2
padding:10
spacing:10
entry: entry
entrye: entrye
TextInput:
id: entry
font_size:20
multiline:True
TextInput:
id: entrye
font_size:20
multiline:True
CustButton:
id: b1
size_hint_y:0.1
text:"Update"
on_press:test.update(entry.text)
CustButton:
id: b2
size_hint_y:0.1
text:"Updatee"
on_press:test.updatee(entrye.text)
CustButton:
size_hint_y:0.1
size_hint_x:0.5
text:"Clear"
on_press:test.clear()
答案 1 :(得分:0)
为了扩展给出的另一个答案,当你从帖子体中得到它时,table就是一个字符串。您必须将其转换为具有int()
功能的整数。在您的代码的上下文中:
def get_name(request):
numbers = []
if request.method == 'POST':
nombre = request.POST.get('nombre')
apellido = request.POST.get('apellido')
table = request.POST.get('table1', 0) # this adds a default, in case table1 is empty
table = int(table) # converts the string into an integer
...
然后你继续你从那里开始。
作为参考,你不应该在生产应用程序中使用@csrf_exempt
,除非你有一个非常非常好的理由。