2011-09-12 94 views
0

我在我的視圖中有幾行代碼,它獲取查詢參數,然後根據該參數進行過濾。Django查詢參數沒有返回無

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=一個URL,它工作正常 - 我的生產服務器上,但是,它似乎認爲搜索是一個空字符串,然後它通過if/then條件返回一個空的queryset。 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 

回答

2

其實,如果你密切關注搜索變量設置爲包含一個空的Unicode字符串[u'']使爲什麼它評估爲True列表:

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

而對於爲什麼你看到不同你的測試和生產之間的行爲可悲,我不知道爲什麼!?也許doc可以提供幫助。

+0

你說得對。我不知道爲什麼我的本地環境和產品環境之間存在差異,但這肯定是導致條件評估爲True的原因。兩者都運行相同版本的python和Django - 非常奇怪。 –