Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
214 views
in Technique[技术] by (71.8m points)

python - How to Check if request.GET var is None?

I'm getting into django and this is getting me a headache. I'm trying to get a simple GET variable. URL is site.com/search/?q=search-term

My view is:

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:
        ...

Search queries like mysite.com/search/? (without q) get through the first if correctly.

The problem is in queries like mysite.com/search/?q=. They don't get caught by if q is not None:

So, the short answer would be How can I check q == None? (I've already tried '', None, etc, to no avail.)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

First, check if the request.GET dict contains a parameter named q. You're doing this properly already:

if request.method == 'GET' and 'q' in request.GET:

Next, check if the value of q is either None or the empty string. To do that, you can write this:

q = request.GET['q']
if q is not None and q != '':
    # Do processing here

Notice that it is not necessary to write request.GET.get('q', None). We've already checked to make sure there is a 'q' key inside the request.GET dict, so we can grab the value directly. The only time you should use the get method is if you're not sure a dict has a certain key and want to avoid raising a KeyError exception.

However, there is an even better solution based on the following facts:

  • The value None evaluates to False
  • The empty string '' also evaluates to False
  • Any non-empty string evaluates to True.

So now you can write:

q = request.GET['q']
if q:
    # Do processing here

See these other resources for more details:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...