rv_k
rv_k

Reputation: 2403

Displaying a messge when search not found

I have done a filtering method using Django. The filtering is based on a choice selected from a drop down menu and a text input. the filtering is working fine. Now i want to display a message if the search is not found. Can somebody help me to solve this. Will post my code here.

def filter(request):
    val3='' 
    if request.GET.has_key('choices'):
        val2=request.GET.get('choices')
    if request.GET.has_key('textField'):
        val3=request.GET.get('textField')
    if request.POST:
        val2=request.POST.get('choices')    
        val3=request.POST.get('textField')
    if val2=='Designation':                
        newData = EmployeeDetails.objects.filter(designation=val3) 
        flag=True 
    elif val2=='Name':
        newData = EmployeeDetails.objects.filter(userName__icontains=val3)
        flag=True 
    elif val2=='EmployeeID':
        newData = EmployeeDetails.objects.filter(employeeID=val3)  
        flag=True       
    elif val2=='Project':
        newData = EmployeeDetails.objects.filter(project=val3)   
        flag=True   
    elif val2=='DateOfJoin':
        newData = EmployeeDetails.objects.filter(dateOfJoin=val3) 
        flag=True       
    else:
        return HttpResponseRedirect('/employeeList/')

html

<h4 align="left">
{%for data in newData%}
<a STYLE="text-decoration:none" href ="http://10.1.0.90:8080/singleEmployee/{{data.id}}?choices={{val2}}&textField={{val3}}&flag=1 ">
{{ data.userName}}<br>
{%endfor%} 
</h4>

Upvotes: 0

Views: 700

Answers (3)

Josh Smeaton
Josh Smeaton

Reputation: 48730

If you're a little bit 'clever' with how you name your get/post variables, you can minimize your view code significantly.

def filter(request):
    fieldname = request.GET.get('choices', None) or request.POST.get('choices')
    value = request.GET.get('textField', None) or request.POST.get('textField')

    if fieldname is None or value is None:
        return HttpResponseRedirect('/employeeList/')

    new_data = EmployeeDetails.objects.filter(**{fieldname:value})
    # use new_data for your purposes here, without the flag

However, you need to make sure that the GET or POST variable names in choices exactly match (including case) the field names of your model.

Then in your template:

<h4 align="left">
{%for data in new_data %}
    <a STYLE="text-decoration:none" href ="http://10.1.0.90:8080/singleEmployee/{{data.id}}?choices={{val2}}&textField=   {{val3}}&flag=1 ">
    {{ data.userName}}<br>
{%endfor%}
{% if new_data is None %}
    <div class='error'> No Data </div>
{% endif %}
</h4>

Upvotes: 1

Mohammad Efazati
Mohammad Efazati

Reputation: 4920

check newdata in filter view or in html ... if its empty show your msg

example :

{% if newData %}
    newData
{% else %}
    error
{% endif %}
  • anything is anything you want check is empty?

Upvotes: 2

user170386
user170386

Reputation:

How about display a message if the flag was not set to true or if newData is null when you can't find anything?

{% if flag is None or flag == False or newData is None %}
    <span>Error Message</span>
{% endif %}

You might want to check to see if it's necessary to check for flag is null too... can't tell from your posted code if that is necessary.

HTH

Upvotes: 1

Related Questions