Django查询参数没有返回None

时间:2011-09-12 17:55:11

标签: python django django-queryset

我的视图中有几行代码可以获取查询参数,然后根据该参数进行过滤。

search = request.GET.get('search', None)

if search:
    accounts = UserProfile.objects.filter(fullname__icontains=search).order_by('fullname')
else:
    accounts = UserProfile.objects.all().order_by('fullname')

由于一些奇怪的原因,在我的本地计算机上,当我在我的生产服务器上提供类似localhost/accounts/admin/localhost/accounts/admin/?search=之类的网址时它似乎正常工作,但似乎认为搜索是一个空字符串,然后它传递if / then条件,返回一个空的查询集。 GET:<QueryDict: {u'search': [u'']}>

为什么python似乎认为这个空字符串是“什么东西?”

>>> x = ''
>>> if x:
...     print "Exists"
... else:
...     print "None"
... 
None

>>> x = u''
>>> if x:
...     print "exists"
... else:
...     print "None"
... 
None

1 个答案:

答案 0 :(得分:2)

实际上,如果你密切注意搜索变量被设置为一个包含空的unicode字符串[u'']的列表,那么为什么它被评估为True:

>>> search = [u'']
>>> bool(search)
True

为什么你在测试和制作之间看到不同的行为,我不知道为什么!也许doc可以提供帮助。