我正在经营一个Pylons项目并遇到了这个奇怪的问题。提交表单时,我可以选择添加徽标(简单.png)。徽标在FieldStorage实例中传递。我尝试评估徽标是否与此一起发送:
if request.params.get('logo'):
do x
但是,即使有徽标,也始终评估为False。如果我打印request.params,我会得到UnicodeMultiDict([('logo', FieldStorage('logo', u'tux.png'))])
。
我解决了它:
if not request.params.get('logo') == None:
do x
我不明白为什么会有效,第一个例子没有。
答案 0 :(得分:5)
这很有趣,不知怎的,FieldStorage
对象解析为false。
编写以下内容(更简单一点)是完全合法的:
if request.params.get('logo') is not None:
# do x
答案 1 :(得分:3)
使用request.params.get('logo')
,您将获得一个FieldStorage
对象,无论如何都可能评估为False
。
无论如何,你只是测试字典中'logo'
键的存在性。你为什么不使用字典语义?没有检查过,但我想它支持的内容如下:
if 'logo' in request.params:
do x
编辑:看了一下代码。 UnicodeMultiDict
是UserDict.DictMixin
的子类,因此它实现__contains__
并支持我的建议。