2012-07-04 6 views
0

양식에서 함수로 값을 전달하고 처리 한 다음 다른 함수에서 함수를 호출하려고합니다. 기본적으로 사용자는 검색어를 제출합니다. process이라는 함수에 전달되어 처리 된 용어를 사전으로 반환합니다. results 함수에서이 용어는 검색 엔진 API로 구문 분석되고 결과는 HTML 또는 JSON 형식으로 반환됩니다. process 함수는 처리 된 용어 대신에 none을 반환합니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 이것은 그래서 코드의 일부는 이상하게 보일 수 있습니다 web2py에서 수행,하지만 난 문제가 파이썬 하나보다는 web2py용어 대신 '없음'을 반환하는 함수

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) 
+0

'용어'는 빈 목록일까요? – Junuxx

+0

@Junuxx 그렇게해서는 안됩니다. term = request.vars.query를 말하면 'query'형식의 값을 변수 term에 지정합니다. 용어는 사전 값이어야합니다. – adohertyd

+1

반환 라인 바로 앞에'print'ing'term'을 시도했지만 처리 후 __process 함수와 관련이 있다고 확신합니까? – Junuxx

답변

2

그것은 web2py 문제이다라고 생각되고있다. web2py에서 리디렉션()하면 request.vars가 새 페이지로 전달되지 않습니다. 세션 바스.

request.vars를 form.process(). accepted 내부에서 인쇄 한 다음 __process()에서 다시 인쇄 해보십시오.

대신 index() 내부에서 처리를 수행 한 다음 결과 dict를 인덱스보기로 반환하십시오. 그런 다음 새 창을 리디렉션하거나 열어 데이터를 전달할 수 있습니다. 또는 사물을 그대로 유지하려면 세션에 저장하여 __process()에서 액세스 할 수 있도록하십시오.

+0

감사! 하지만 그냥'__process' 함수를 제거하고 URL 바로 뒤에 dict term을 호출한다고 해봅시다. "http://www.blekko.com/?q=%(term)s+/json&auth= "% dict = (term = request.vars.query)'이 작동합니다. 왜 그렇게? – adohertyd

+0

아니요, 작동하지 않습니다. index() 함수에서 리디렉션하면 완전히 새로운 요청을 시작하므로 모든 request.vars가 손실됩니다. results() 함수에 대한 요청이 들어 오면 request.vars는 비어 있습니다. – Anthony

+0

@Anthony는'form.accepted' 함수에'session.term = request.vars.query'를 추가했는데 내 코드는 이제 작동합니다. 명확한 사람들 주셔서 감사합니다. – adohertyd