Параметры запроса Django не возвращают None - PullRequest
0 голосов
/ 12 сентября 2011

В моем представлении есть несколько строк кода, которые получают параметр запроса и затем фильтруют его по этому параметру.

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')

По какой-то странной причине на моей локальной машине кажется, что когда ядать URL-адрес типа localhost/accounts/admin/ или localhost/accounts/admin/?search=, он работает нормально - на моем производственном сервере, однако, кажется, что поиск пустая строка, а затем он передает условное условие 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

1 Ответ

2 голосов
/ 12 сентября 2011

На самом деле, если вы обратите пристальное внимание, переменная поиска будет установлена ​​в список, содержащий пустую строку в кодировке Unicode [u''], поэтому, почему она оценивается как True:

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

И почему вы видите разныеК сожалению, я не знаю почему !?возможно документ может помочь.

...