0

我试图混合搭配一切,似乎找不到正确的答案。

我正在尝试对查询使用过滤器。但结果如下: if 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/query,如何显示数据?

4

2 回答 2

1

我得到了它!

收到请求时,结果如下。如果query is '',它将显示“有空白”。如果query!=None,则显示“带有查询”。但是,如果query is None,这永远不会显示,因为您要求 aq/query 的事实总是意味着 q/query 是空白的。

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)

解决方案:强制它为“空白”!仅当查询为“空白”时,才会显示所有数据。

于 2013-01-04T00:49:07.927 回答
1

使用 时,如果不存在self.request.get('q'),则默认值为None。'q'你可以用一个简单的字典来测试它:

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

因此,如果您正在检查“q”是否在您的请求字典中,您应该与 None ( 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()查看实际结果:(在本例中为空白字符串)

>>> print repr(d.get('q', ''))
''

因此,由于self.request.get('q')默认为 '',我将执行以下操作:

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

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

else: # Non-blank
  custQuery = db.Query(Customer)
于 2013-01-04T07:45:32.107 回答