我正在进入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)等搜索查询如果正确的话可以通过第一个查询。
问题出在 mysite.com/search/?q = 等查询中。他们不会被if q is not None:
所以,简短的回答是如何检查q == None
? (我已经尝试''
,None
等,但无济于事。)
答案 0 :(得分:39)
首先,检查request.GET
dict是否包含名为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)
。我们已经检查过以确保'q'
dict中有request.GET
个密钥,因此我们可以直接获取该值。您应该使用get
方法的唯一时间是,如果您不确定某个密钥是否具有某个密钥并且希望避免引发KeyError异常。
然而,基于以下事实,有一个更好的解决方案:
None
评估为False
''
也评估为False
True
。现在你可以写:
q = request.GET['q']
if q:
# Do processing here
有关详细信息,请参阅以下其他资源:
答案 1 :(得分:1)