Форма поиска в Django с python - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь добавить простую форму поиска на мой django веб-сайт. Когда я нажимаю кнопку поиска, я перенаправляюсь на страницу new_search. html (как и должно быть), но страница не показывает никакого результата. Спасибо за вашу помощь!

Код такой:

У меня есть домашняя страница, где я размещаю форму поиска следующим образом:

<form method="get" action="{% url 'new_search' %}">
      {%csrf_token%}
      <input type="text" name="srh" class= "form-control" placeholder="Search">
      <button type="submit" name="submit">Search</button>
</form>

Когда пользователь ищет для чего-то результат должен быть показан на странице new_search. html. Функция, которую я написал в views.py, выглядит следующим образом:

def new_search(request):
    if request.method == 'GET':
        srch = request.GET.get('srh')

        if srch:
            sr = Info.objects.filter(Q(band__icontains=srch) | Q(disco__icontains=srch))

            if sr:
                return render(request, 'new_search.html', {'sr':sr})
            else:
                messages.error(request, 'no results')
        else:
            return render(request, 'new_search')

    return render(request, 'new_search.html')

И страница new_search. html выглядит так:

    <div>
{% if sr %}
  {% for k in sr %}
        <table width="200px">
          <tr><td>Band</td><td>{{k.band}}</td></tr>
          <tr><td>Album</td><td>{{k.disco}}</td></tr>
        </table>
  {%endfor%}
{%endif%}
    </div>

Model.py таков:

class Info(models.Model):
    band = models.CharField(max_length=200, help_text="Write Here")
    disco = models.CharField(max_length=200, help_text="Write Here")
    etichetta_p = models.CharField(max_length=200, help_text="Write Here")
    etichetta_d = models.CharField(max_length=200, help_text="Write Here")
    matrice = models.CharField(max_length=200, help_text="Write Here")
    anno = models.PositiveIntegerField(default=0)
    cover = models.ImageField(upload_to='images/')

    def __str__(self):
        return self.band

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('search.urls')),
    path('accounts/', include('django.contrib.auth.urls')),

app urls.py

urlpatterns = [
    path('', homeView.as_view(), name='home'),
    path('anno', views.anno, name='anno'),
    path('band/', bandView.as_view(), name='band'),
    path('album/', albumView.as_view(), name='album'),
    path('add/create', views.AddInfo.as_view(), name='add_create'),
    path('signup/', core_views.signup, name='signup'),
    path('new_search/', new_searchView.as_view(), name='new_search'),
]

1 Ответ

0 голосов
/ 30 марта 2020

Мне кажется, что вы должны обрабатывать POST метод в вашем классе, так как вы используете его, например:

class new_searchView(TemplateView):
    template_name = "new_search.html"

    def post(self, request, *args, **kwargs):
        print('FORM POSTED WITH {}'.format(request.POST['srh']))
        return render(self.request, 'new_search.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...