Slater Victoroff
Slater Victoroff

Reputation: 21914

Using Django templates to set default values

So, I'm making a search function and I would like the previously entered query to remain in the search box when the search results are rendered. Currently the way that I'm doing this is by sending a POST request, grabbing the query and sending that back to the template as a variable. For some reason though, it will only work for the first word of the query, and all subsequent words get dropped. When I render the same variable within a

tag however it comes out just as I would expect. Is there something there I'm not doing quite right?

<div id="searchwrapper">
    <form action="/search" method="post"> {% csrf_token %}
        {% if old_query %}
        <input type="text" class="searchbox" name="s" value={{old_query}} />
        {% else %}
        <input type="text" class="searchbox" name="s" value="" />
        {% endif %}
        <input type="image" src="static/images/search-icon.svg" class="searchbox_submit" value="" />
    </form>
</div>


def search(request):
    context = {}
    context.update((csrf(request)))
    results_string = ""
    if request.POST:
        results_string = find(request)
        old_query = request.POST['s']
        context.update({"old_query": old_query})
    search_bar = render_to_string("search.html", Context(context))
return HttpResponse(search_bar + results_string)

I don't think that the find method is relevant, but let me know if you think it would be useful and I can post it. The template is the relevant part of "search.html" Like I said, if I add the line <p>{{ old_query }}</p> to the {% if old_query %} section, the right value shows up, but at present if I used a query like hello stackoverflow! I would only get "hello" in as the value for the search field.

This is probably something silly, but I'm fairly new to web dev, so any help is appreciated.

Upvotes: 0

Views: 3898

Answers (1)

Paulo Bu
Paulo Bu

Reputation: 29794

Fix this line to wrap {{old_query}} between quotes:

<input type="text" class="searchbox" name="s" value="{{old_query}}" />

That should give you the whole search instead of the first word.

Upvotes: 3

Related Questions