Server error no httpresponse implementing htmx active search

51 views
Skip to first unread message

Brian

unread,
Dec 9, 2022, 1:20:06 PM12/9/22
to Django users
I'm trying to implement the active search functionality with htmx but am getting a server error. I'd really appreciate any help on this. Googling the problem resulted in people either not using return before render or an indentation problem. I've checked these.

Thanks in advance,
Brian
```
ValueError: The view Striker.views.search_player didn't return an HttpResponse object. It returned None instead.
```
view.py
```
def search_player(request):
  print(request)
  search_text = request.POST.get("search")
  results = Player.objects.filter(name__icontains=search_text)
  context = {'results': results}
  return render(request, 'Striker/partials/player-search-results.html', context)
```
player-search-results.html
```
{% if results %}
  {% csrf_token %}
  {% for player in results %}
    <div class="box-border h-85 w-60 mb-1">
      <div class="mx-2 rounded-lg border-double border-2 border-emerald-500 px-2 py-2 bordermildblue">
        <div class="bg-gray-800">
          <h2 class="text-blue-400 text-lg title-font font-medium mb-4 button-85"><a
              href="{% url 'player.detail' player.pk %}" title="Link to Player's Toons">{{ player.name }}</a>
          </h2>
        </div>
        <div class="text-left">
          <p class="leading-relaxed text-base">GP: {{ player.gp|intword }}</p>
          <p class="leading-relaxed text-base">Toons: {{ player.gpChar|intword }}</p>
          <p class="leading-relaxed text-base">Ships: {{ player.gpShip|intword|intcomma }}</p>
          <p class="leading-relaxed text-base">Allycode: <a class="text-blue-500"
              href="https://swgoh.gg/p/{{ player.allycode }}" Title="Link to SWGOH.gg">{{ player.allycode }}</a>
            <span class="text-xs">.gg</span>
          </p>
        </div>
      </div>
    </div>
  {% endfor %}
{% else %}
  <p>No search results</p>
{% endif % }
```
called from 
```
{% load humanize %}

<div class="d-flex justify-content-end mb-4">
  <form>
  {% csrf_token %}
  <input type="text"
    hx-post="{% url 'search-player' %}"
    hx-target="#results"
    hx-trigger="keyup changed delay:500ms"
    name="search"
    class="form-control-sm mr-2"
    placeholder="Search players..." />
  </form>
</div>

<div id="results">

</div>
```
urls.py
```
path('striker/search-player', views.search_player, name='search-player'),
```

Ryan Nowakowski

unread,
Dec 9, 2022, 6:15:46 PM12/9/22
to django...@googlegroups.com


On December 9, 2022 12:10:23 PM CST, Brian <bisco...@gmail.com> wrote:
>```
>ValueError: The view Striker.views.search_player didn't return an
>HttpResponse object. It returned None instead.
>```
>view.py
>```
>def search_player(request):
> print(request)
> search_text = request.POST.get("search")
> results = Player.objects.filter(name__icontains=search_text)
> context = {'results': results}
> return render(request, 'Striker/partials/player-search-results.html',
>context)
>```

I assume view.py is a typo and you really meant views.py above? If you've got both a view.py and a views.py maybe that's your issue.

Brian

unread,
Dec 9, 2022, 6:49:25 PM12/9/22
to Django users
Yes it was a type, otherwise nothing would work lol. Thanks for the reply. Mysteriously it is not giving me the server error. I did simplify the html so there must have been something in that. Now I'm having a different problem. I'm getting "Method Not Allowed: /players/search-player/". I've updated the view to 
```
def search_player(request):  
  def post(self, request, **kwargs):

    search_text = request.POST.get("search")
    results = Player.objects.filter(name__icontains=search_text)
    context = {'results': results}
    return render(request, 'Striker/players', context)
```
```
path('striker/players/search-player/', views.search_player, name='search-player'),
```
And the simplified template
```
{% extends './base.html' %}
{% load humanize %}

{% block content %}
<section class="bg-black body-font">
  <div class="container px-5 py-2 mx-auto flex flex-wrap">
    <div class="-m-4">
      <div class="p-4 md:w-full">
        <h1 class="text-2xl mb-2 mt-2 text-emerald-500">Current Members</h1>
        <input class="form-control" type="search"
          name="search"
          hx-post="/players/search-player/"
          hx-trigger="keyup changed delay:500ms, search"
          hx-target="#search-results"
        />
          <div class="flex flex-wrap p-2 sm:flex-row" id="search-results">
            {% for player in players %}

            <div class="box-border h-85 w-60 mb-1">
              <div class="mx-2 rounded-lg border-double border-2 border-emerald-500 px-2 py-2 bordermildblue">
                <div class="bg-gray-800">
                  <h2 class="text-blue-400 text-lg title-font font-medium mb-4 button-85"><a
                      href="{% url 'player.detail' player.pk %}" title="Link to Player's Toons">{{ player.name }}</a>
                  </h2>
                </div>
                <div class="text-left">
                  <p class="leading-relaxed text-base">GP: {{ player.gp|intword }}</p>
                  <p class="leading-relaxed text-base">Toons: {{ player.gpChar|intword }}</p>
                  <p class="leading-relaxed text-base">Ships: {{ player.gpShip|intword|intcomma }}</p>
                  <p class="leading-relaxed text-base">Allycode: <a class="text-blue-500"
                      href="https://swgoh.gg/p/{{ player.allycode }}" Title="Link to SWGOH.gg">{{ player.allycode }}</a>
                    <span class="text-xs">.gg</span>
                  </p>
                </div>
              </div>
            </div>
            {% endfor %}
          </div>
      </div>
    </div>
  </div>
</section>

{% endblock content %}
```
Reply all
Reply to author
Forward
0 new messages