【问题标题】:All items showing before search is preformed执行搜索前显示的所有项目
【发布时间】:2012-01-24 17:06:09
【问题描述】:

我正在尝试做一个基本的搜索功能,但我遇到了一个小问题。当我转到具有搜索表单的模板时,它会在我尝试搜索之前显示所有项目。有没有办法在用户输入搜索词并点击搜索按钮之前显示空白模板?

例子:

[搜索栏][按钮]

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

模板

{% 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 %}

【问题讨论】:

    标签: python django django-forms django-templates django-views


    【解决方案1】:

    应该做一个改变:

    if request.method == 'GET':
    

    应该是

    if request.GET:
    

    根本问题是您的请求方法始终是 GET,因此您永远不会进入 else 块或函数的底部。

    【讨论】:

      【解决方案2】:

      另一种选择是在 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 语句检查按钮名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-30
        • 1970-01-01
        • 2013-10-30
        • 2014-07-10
        • 2019-04-22
        • 2015-02-12
        • 1970-01-01
        相关资源
        最近更新 更多