在Django中编辑搜索视图

时间:2010-10-25 14:25:29

标签: django search django-forms django-views

你好我在django工作如何使用Django文档站点的搜索表单。以下是一些信息。 现在,有没有办法可以为标题制作零件搜索?例如,如果我想搜索一本名为“Apress”的书,但是我没有输入整个单词而只是写了“ap”来获得Apress。有没有办法如何实现这个解决方案?

    from django.db.models import Q
    from django.shortcuts import render_to_response
    from models import Book

    #views.py
    def search(request):
        query = request.GET.get('q', '')
        if query:
            qset = (
                Q(title__icontains=query) |
                Q(authors__first_name__icontains=query) |
                Q(authors__last_name__icontains=query)
            )
            results = Book.objects.filter(qset).distinct()
        else:
            results = []
        return render_to_response("books/search.html", {
            "results": results,
            "query": query
        })

    #search html

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html lang="en">
    <head>
        <title>Search{% if query %} Results{% endif %}</title>
    </head>
    <body>
      <h1>Search</h1>
      <form action="." method="GET">
        <label for="q">Search: </label>
        <input type="text" name="q" value="{{ query|escape }}">
        <input type="submit" value="Search">
      </form>

      {% if query %}
        <h2>Results for "{{ query|escape }}":</h2>

        {% if results %}
          <ul>
          {% for book in results %}
            <li>{{ book|escape }}</l1>
          {% endfor %}
          </ul>
        {% else %}
          <p>No books found</p>
        {% endif %}
      {% endif %}
    </body>
    </html>

1 个答案:

答案 0 :(得分:1)

如果您想在字段的开头匹配,可以使用startswithistartswith,如果您希望它区分大小写。您现在使用的icontains即使在字符串中也允许匹配,即。 'arry'将匹配'Harry'。虽然startswith允许'Har'匹配'Harry',但不允许'ArHarHar'