我正在进入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:
...
Run Code Online (Sandbox Code Playgroud)
搜索mysite.com/search/等查询?(没有q)如果正确的话,可以通过第一个.
问题出在mysite.com/search/?q=等查询中.他们不会被抓住if q is not None:
所以,简短的回答是我如何检查q == None
?(我已经尝试过''
,None
等等,无济于事.)
Wes*_*ley 40
首先,检查request.GET
dict是否包含一个名为的参数q
.你已经正确地做到了这一点:
if request.method == 'GET' and 'q' in request.GET:
Run Code Online (Sandbox Code Playgroud)
接下来,检查值q
是否为None
空字符串.要做到这一点,你可以这样写:
q = request.GET['q']
if q is not None and q != '':
# Do processing here
Run Code Online (Sandbox Code Playgroud)
请注意,没有必要写request.GET.get('q', None)
.我们已经检查过以确保dict中有一个'q'
键request.GET
,所以我们可以直接获取值.你应该使用该get
方法的唯一时间是你不确定dict是否有某个键并且想要避免引发KeyError异常.
但是,基于以下事实,有一个更好的解决方案:
None
计算结果为False
''
也计算为False
True
.所以现在你可以写:
q = request.GET['q']
if q:
# Do processing here
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅其他资源: