Django 建立用户的视图(搜索 )

在web应用上,有两个关于搜索获得巨大成功的故事:Google和Yahoo,通过搜索,他们建立了几十亿美元的业务。几乎每个网站都有很大的比例访问量来自这两个搜索引擎。甚至,一个网站是否成功取决于其站内搜索的质量。因此,在我们这个网站添加搜索功能看起来好一些。

在网站添加搜索功能:

开始,在URLconf (website.urls )添加搜索视图。添加类似 path('search/',views.search) 设置URL模式。

下一步,在视图模块(website.views )中写这个 search 视图:

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

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
    })

现在仍然没有这个搜索视图的模板,可以如下实现:

<!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>

查询界面:

此时http://127.0.0.1:8000/admin/(管理员界面)和http://127.0.0.1:8000/search/ (查询界面)均可以登录

posted @ 2019-04-27 16:39  南邮吴亦凡  阅读(368)  评论(0编辑  收藏  举报