2009-09-23 43 views
6

简单的东西在这里...测试的饼干存在在Django

,如果我尝试通过

request.COOKIE["key"] 

引用在Django一个cookie,如果cookie不存在,这将抛出一个关键的错误。

对于Django的GETPOST,因为它们是QueryDict对象,我可以做

if "foo" in request.GET 

这是奇妙复杂的...

,是不是有什么最接近这个饼干一个try/catch块,如果有什么...

回答

20

request.COOKIES是一个标准的Python字典,所以相同的语法工作。

做的另一种方法是:

request.COOKIES.get('key', 'default') 

如果该键存在返回的值,否则“默认” - 你可以把任何你在的地方“默认”的喜欢。

5

首先,它是

request.COOKIES 

不是request.COOKIE。其他人会给你一个错误。

其次,它是一个字典(或类似字典)对象,所以:

if "foo" in request.COOKIES.keys() 

会给你你所需要的。 如果你想要得到的cookie的值,你可以使用:

request.COOKIES.get("key", None) 

那么,如果没有关键"key",你会得到一个None,而不是例外。

+2

由于python 2.2,你可以在request.COOKIES中使用'if'foo“ - 没有必要添加'.keys()' – 2009-09-23 16:21:13

+1

的权利。可能它只是我,但我更喜欢更长的版本(也许与长期以前一起工作的问题很长时间)。它更对称,更隐含我如何检查是否使用:在dict.keys()中的“foo”中,如果dict.values()中的“bar”... ... – kender 2009-09-23 16:28:28

+0

@kender,则“ dict.keys中的“foo”()' - 'dict.keys()'创建一个清单,然后垃圾收集 - 额外的开销。 – warvariuc 2013-04-04 13:30:37