Все элементы отображаются перед поиском - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь выполнить базовую функцию поиска, но у меня небольшая проблема.Когда я перехожу к шаблону с формой поиска, он отображает все элементы, прежде чем я даже пытаюсь выполнить поиск.Есть ли способ показать пустой шаблон, пока пользователь не введет условие поиска и не нажмет кнопку поиска?

Пример:

[Поле поиска] [Кнопка]

1
2
3
и т. Д.

views.py

def view_player_home(request):
    if request.method == 'GET':
        form = searchPlayerForm(request.GET)
        if form.is_valid():
            string = form.cleaned_data.get('text')
            players = Player.objects.filter(Q(first_name__icontains = string)|Q(last_name__icontains = string))
            return render_to_response('player/player.html', {'form': form, 'players':players}, context_instance=RequestContext(request))
else:
    form = searchPlayerForm()
return render_to_response('player/player.html', {'form': form}, context_instance=RequestContext(request))

forms.py

class searchPlayerForm(forms.Form):
    text = forms.CharField(label = "Search")

    def __init__(self, *args, **kwargs):
        super(searchPlayerForm, self).__init__(*args, **kwargs)
        self.fields['text'].required = False

template

{% extends "base.html" %}

{% block content %}

<h5>Find Player</h5>
<form method="GET" action="">
    {% csrf_token %}
    {{ form.as_table }}
    <input type="submit" value="Submit"/>
</form>

{% if players %}
   {% for p in players %}
       {{ p.first_name }} {{ p.last_name }}
   {% endfor %}
{% else %}
   No Players
{% endif %}

{% endblock %}

Ответы [ 2 ]

1 голос
/ 24 января 2012

Другой вариант - явно искать термин в данных GET

if request.GET and 'text' in request.GET:
    # do query / processing

или даже не разрешать пропуски

if request.GET and 'text' in request.GET and request.GET['text'] != '':
    # do query / processing

Это легко работает, если у вас есть только одно полеили проверяем, имеют ли опции в форме определенные значения.

Когда я выполняю много полей, мне нравится делать именованную кнопку отправки, чтобы я мог проверить, нажата ли она, а затем выполнить проверку операторов ifдля имени кнопки.

1 голос
/ 24 января 2012

Одно изменение должно сделать это:

if request.method == 'GET':

должно быть

if request.GET:

Основная проблема заключается в том, что ваш метод запроса всегда GET, поэтому вы никогда не переходите в блок else или в конец функции.

...