如何在Bottle中向HTML表单传递值?
我刚接触Python和Bottle,正在尝试开发一个简单的网页应用,用来管理公司收到的箱子里的物品。 我用Bottle创建了一个表单,里面有两个文本框和一个“保存”按钮。我扫描箱子的ID,它会显示在文本框1里。然后我扫描物品的ID,它会显示在文本框2里。接着我点击“保存”按钮。 这个过程是可以的……但每次我点击“保存”后,表单会重新加载,也就是会打开一个空白页面,我得返回上一页,清空文本框1的内容,然后再重复这个过程,直到我换到下一个箱子,这时文本框1和文本框2都是空的。 我想要的是,每次点击“保存”按钮时,数据能提交到我的数据库,但表单不重新加载,文本框1的内容能清空。这样我就可以直接扫描下一个物品,依此类推,直到所有物品都完成。 有没有人能帮我解决这个问题? 这是我目前在Bottle模板中的代码:
<form action="/accession" method="GET">
Scan Box: <input type="text" size="18" name="package">      
Scan Item: <input type="text" size="13" name="sample">
<input type="submit" name="save" value="Save" >
** 我稍微改了一下表单,现在它的行为不同了,也就是说,当我点击“保存”时,它会停留在同一页面(这很好),但两个文本框的内容都被清空了。 我需要的是只清空一个文本框,而另一个文本框的内容保持不变。我该怎么做呢? 谢谢 ** 我注意到我可以在“文本”框中使用'value'属性……像这样:
Scan Box: <input type="text" value="123" name="package">
在我的情况下,值“123”应该是动态的。我在我的Python脚本中有这个值,想用它替换“123”,但我不知道怎么把它传递到表单里。 有人能帮我吗?谢谢
1 个回答
你应该使用模板。这里有一些关于Bottle内置模板的文档;我个人更喜欢Jinja2,但等你掌握了这个概念后,可以自己决定用哪个。
简单来说,你会创建一个模板文件,这个文件就是你想返回的html内容。它会包含类似这样的东西:
Scan Box: <input type="text" value="{package}" name="package">
而你的Bottle函数(你还没有提供,所以我只能猜测)大概会是这样的:
@route('/myform')
def submit():
the_package = zzz # get the value however your application chooses
return template('form1', package=the_package) # your template file is form1.tpl
在你的模板文件中,the_package
的值会自动替换掉{package}
出现的地方。
请尝试Bottle文档中的模板示例,如果还有其他问题,请告诉我们。