0

我正在尝试掌握 web2py/python。我想让用户填写一个搜索表单,他们搜索的词被发送到我的 python 脚本,该脚本应该将查询发送到 blekko API 并在新的 HTML 页面中将结果输出给他们。我已经实现了以下代码,但是我没有出现正常的索引页面,而是直接从 blekko 获取 html 响应,其中 '%(query)' /html 出现在它的搜索栏中。真的需要一些帮助!

默认/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">&nbsp;</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
4

3 回答 3

1

I think you are misunderstanding how string formatting works. You need to put the address and query together still:

address = "http://www.blekko.com/?q='%(query)s'+/html&auth=<mykey>" % dict(query=request.vars.query)
于 2012-07-03T13:09:48.423 回答
1

在表单中添加一个隐藏字段,将其称为“已提交”。然后重新格式化您的控制器功能:

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

这将显示您的索引页面,除非表单已提交并且页面接收到“提交”表单变量。

于 2012-07-03T21:13:36.970 回答
1

/html 不做任何事情。很高兴你的问题得到了回答。这里有 blekko 搜索 api 的 python 客户端代码:https ://github.com/sampsyo/python-blekko

于 2012-07-05T04:48:50.340 回答