I had to defer the else statement and the return statement in view.py. And also put statuss
in the second if statement. And then it worked, as I expected! Please guide me if there are any improvements. Thanks!
views.py:
def search_status(request): if request.method == "GET": search_text = request.GET['search_text'] if search_text is not None and search_text != u"": search_text = request.GET['search_text'] statuss = Status.objects.filter(status__contains = search_text) else: statuss = [] return render(request, 'ajax_search.html', {'statuss':statuss})
This was an ajax script:
$(function() { $('#search').keyup(function() { $.ajax({ type: "GET", url: "/status/search_status/", data: { 'search_text' : $('#search').val(), 'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val() }, success: searchSuccess, dataType: 'html' }); }); }); function searchSuccess(data, textStatus, jqXHR) { $('#search-results').html(data) }
Snippet index.html:
<input type="text" id="search" name="search" /> <ul id="search-results"> </ul>
Html included:
{% if statuss > 0 %} <ul class="statuss"> {% for status in statuss %} <li> <p>{{status}}</p> </li> {% endfor %} </ul> {% else %} <p>No status found.</p> {% endif %}
Robin source share