2013-01-03 4 views
0

모든 것을 혼합하고 일치 시키려고합니다. 올바른 답을 찾을 수없는 것 같습니다.요청을 받고 Python GAE에 None이있는 쿼리에 If else 문을 사용합니다.

검색어에 필터를 사용하려고합니다. 그러나 결과는 다음과 같습니다. q!=None 인 경우 필터를 생성합니다. 그러나, q==None 경우, 내가 아래 바로 다음 코드로 모두 교체하는 경우, 모든 데이터를 표시, run()

q = self.request.get('q') 
if q!=None: 
    custQuery = db.Query(Customer) 
    custQuery.filter('license = ',q) 
elif q==None: 
    custQuery = Customer.all() 

사용 후 모든 데이터를 표시하지만,하지 않을 것입니다.

custQuery = db.Query(Customer) 

if-else 문에 q/쿼리가없는 경우 어떻게 데이터를 표시합니까?

+0

'if' 절이 하나도 일치하지 않을 때'q' 값을 인쇄하려 했습니까? – Rubens

+0

나는'self.out.response.write (q)'를 시도했다. 그것은'q'에 대한 올바른 문자열을 표시합니다 (내가 말했듯이, 필터). 'q == None'이라면,'self.out.response.write (q)'를 쓸 때 아무것도 표시하지 않습니다. 내가 gae에 대한 인쇄물을 사용한다면'q'가 어디로 갈지 모르겠다. –

+1

'q is None'과'q is None None' 대신에'q is None'과'q is None None'을 사용해야합니다. 아마 아무런 차이가 없겠지만 좋은 연습입니다. (http://www.python.org/dev/peps/pep-0008/#programming-recommendations). – jozzas

답변

1

알았습니다.

요청을받는 경우 다음 결과가 있습니다. query is '' 인 경우 "비어 있음"이 표시됩니다. query!=None 인 경우 "with query"가 표시됩니다. 그러나 query is None 인 경우 q/쿼리를 요청한다는 사실은 항상 q/쿼리가 비어 있음을 의미하므로 표시되지 않습니다. 따라서

if q is None: 
    a = "without query" 
    #custQuery = Customer.all() 
elif q is '': 
    a = "with blank" 
elif q!=None: 
    a = "with query" 

, 당신은 데이터를 수신하면, 당신은 query is None 선언 문제를 해결합니다. 이처럼 :

q = self.request.get('q') 
if q is '': 
    custQuery = db.Query(Customer) 
elif q is None: 
    q = '' #Force it! (Previously: q is '' - and it works.) 
    custQuery = db.Query(Customer) 
elif q!=None: 
    custQuery = db.Query(Customer) 
    custQuery.filter('license = ',q) 

솔루션 : 포스는 '빈'이 될 수 있습니다! 쿼리가 '공백'인 경우에만 모든 데이터가 표시됩니다.

+0

나는이 라인이 아무것도하지 않을 것이라고 생각하지 않습니다 :'q is None #Force it! ' –

+0

시도해보십시오. 그것은 나를 위해 파이썬 2.7.3에서 작동합니다. 그건 그렇고, 나는 json rest server를 사용하고있다. 그래서,이 나머지 서버에 연결된 html 데이터를 호출합니다. –

+0

'is'는 비교를 위해서 사용하는 것이지 할당을 위해서 사용하지 않습니다 –

1

self.request.get('q')을 사용하는 경우 'q'이없는 경우 기본값은 없음입니다. 당신은 간단한 사전에 이것을 테스트 할 수 있습니다

>>> d = {'q': 'message'} 
>>> print d.get('q') 
'message' 
>>> d = {'a': 'no q here'} 
>>> print d.get('q') 
None 

를 따라서, 'Q'는 귀하의 요청에 사전에, 당신이 없음 (if q is None:)에 대해 비교해야하는 경우 당신이 확인하는 경우.

당신이 당신의 쿼리가 비어 있는지 확인하기 위해 비교하는 경우, 당신은 몇 가지 할 수있는 :

>>> query = '' 
>>> print query is None 
False 
>>> print query == '' 
True 
>>> print len(query) > 0 
False 
>>> print bool(query) 
False 

>>> query = 'valid' 
>>> print query is None 
False 
>>> print query == '' 
False 
>>> print len(query) > 0 
True 
>>> print bool(query) 
True 

당신은 결과가 실제로 무엇을보고 repr()를 사용할 수 있습니다 (이 경우 ''에 self.request.get('q') 기본값 이후 빈 문자열)

>>> print repr(d.get('q', '')) 
'' 
따라서

은 내가 할 것 다음 :

q = self.request.get('q') 

if q is '': # Blank or non-existent 
    custQuery = Customer.all() 

else: # Non-blank 
    custQuery = db.Query(Customer) 
+0

우리는 파이썬뿐만 아니라 '파이썬과 개'에 대해서도 이야기하고 있습니다. 이 문제에 대해'rev-5'를 직접 확인하십시오. 위의이 솔루션은 작동하지 않습니다. 실제 코드는 https://github.com/fritzdenim/pawnsoftware.git –

+0

에서 다운로드 할 수 있습니다. 문제가 발견되었습니다. 'self.request'는'dict'가 아니고, GAE Request 객체입니다. '.get()'함수의 기본값은'' ''이며'None'이 아닙니다. [docs] (https://developers.google.com/appengine/docs/python/tools/webapp/requestclass#Request_get)를 참조하십시오. –

+0

self.request는 dict입니다. q (javascript의 var 검색 내)는 사전이되도록 일련 화되었습니다. 필요한 주 파일은 templates/index.html과 resources.py입니다. –

관련 문제