如何检查request.GET变量是否为None?
我正在学习Django,这让我有点头疼。我想获取一个简单的GET变量。网址是 site.com/search/?q=search-term
我的视图代码是:
def search(request):
if request.method == 'GET' and 'q' in request.GET:
q = request.GET.get('q', None)
if q is not None:
results = Task.objects.filter(
Q(title__contains=q)
|
Q(description__contains=q),
)
...return...
else:
...
else:
...
像 mysite.com/search/?(没有q的情况)的搜索请求可以顺利通过第一个if判断。
但问题出在像 mysite.com/search/?q= 这样的请求上。它们没有被 if q is not None:
这个判断捕捉到。
所以,简单来说,我想知道怎么检查 q == None
?(我已经试过 ''
、None
等等,但都没用。)
2 个回答
58
首先,检查一下 request.GET
这个字典里有没有一个叫 q
的参数。你现在做得已经很对了:
if request.method == 'GET' and 'q' in request.GET:
接下来,检查一下 q
的值是不是 None
或者空字符串。你可以这样写:
q = request.GET['q']
if q is not None and q != '':
# Do processing here
注意,其实不需要写 request.GET.get('q', None)
。因为我们已经确认了 request.GET
这个字典里有 'q'
这个键,所以可以直接取值。只有在你不确定字典里是否有某个键的时候,才需要用 get
方法,这样可以避免出现 KeyError 错误。
不过,还有更好的解决方案,基于以下几点:
- 值
None
被认为是False
- 空字符串
''
也被认为是False
- 任何非空字符串都被认为是
True
。
所以现在你可以这样写:
q = request.GET['q']
if q:
# Do processing here
想了解更多细节,可以查看这些资源: