0

フォームから関数に値を渡して処理し、別の関数で関数を呼び出そうとしています。基本的に、ユーザーは検索語を送信します。呼び出された関数に渡されprocess、現在処理されている用語が辞書として返されます。このresults関数では、用語が検索エンジン API に解析され、結果が HTML または JSON 形式で返されます。ただし、関数processは処理された用語の代わりに何も返しません。誰が私が間違っているのか教えてもらえますか? これは web2py で行われているため、コードの一部が奇妙に見えるかもしれませんが、問題は web2py ではなく python にあると思います

import urllib2

def index():
    form = FORM('',
            INPUT(_name='query', requires=IS_NOT_EMPTY()),
            INPUT(_type='submit'))
    if form.process().accepted:
        redirect(URL('results'))
    elif form.errors:
        response.flash = 'form has errors'
    else:
        response.flash = 'please fill the form'
    return dict(form=form)

def __process():
    term=request.vars.query
    #do some processing
    return dict(term=term)

def results():
    import urllib2
    address = "http://www.blekko.com/?q=%(term)s+/json&auth=<mykey>" % __process()

    results = urllib2.urlopen(address).read()

    return dict(results=results)
4

1 に答える 1

2

それはweb2pyの問題です。web2py で redirect() を実行すると、request.vars が新しいページに渡されません。ただし、セッション変数はそうです。

form.process().accepted 内で request.vars を印刷してから、__process() で再度印刷してみてください。

代わりに、すべての処理を index() 内で実行してから、結果の辞書をインデックス ビューに返します。次に、リダイレクトするか、新しいウィンドウを開いてデータを渡すことができます。または、そのままにしておく場合は、セッションに保存して、__process() からアクセスできるようにします。

于 2012-07-04T22:28:29.650 に答える