我正在尝试掌握web2py/python。我想让用户填写搜索表单,他们搜索的术语被发送到我的 python 脚本,该脚本应该将查询发送到 blekko API 并将结果输出到新的 HTML 页面中。我已经实现了以下代码,但我没有显示正常的索引页面,而是直接从 blekko 获得 html 响应,搜索栏中出现"%(查询)"/html。真的需要一些帮助!
default/index.html 页面上的 HTML 表单
<body>
<div id="MainArea">
<p align="center">MY SEARCH ENGINE</p>
<form name="form1" method="get" action="">
<label for="SearchBar"></label>
<div align="center">
<input name="SearchBar" type="text" id="SearchBar" value="" size = "100px"><br />
<input name="submit" type="submit" value="Search">
</div>
</form>
<p align="center"> </p>
default.py 控制器上的 Python 代码
import urllib2
def index():
import urllib2
address = "http://www.blekko.com/?q='%(query)'+/html&auth=<mykey>"
query = request.vars.query
response = urllib2.urlopen(address)
html=response.read()
return html
我认为您误解了字符串格式的工作原理。您仍然需要将地址和查询放在一起:
address = "http://www.blekko.com/?q='%(query)s'+/html&auth=<mykey>" % dict(query=request.vars.query)
在表单中添加隐藏字段,将其称为"已提交"。然后重新格式化控制器功能,如下所示:
import urllib2
def index():
if request.vars.submitted:
address = "http://www.blekko.com/?q='%(query)'+/html&auth=<mykey>"
query = request.vars.query
response = urllib2.urlopen(address)
html=response.read()
return html
else:
return dict()
这将显示您的索引页面,除非表单已提交并且页面收到"已提交"表单变量。
/html 不执行任何操作。很高兴您的问题得到解答。这里有blekko搜索api的python客户端代码:https://github.com/sampsyo/python-blekko