搜索列表页的URL是:网站域名/s/搜索关键词,搜索页面,同样我们直接复制一份list.html页面,然后更名为search.html。
视图函数代码:
def search(request): ss=request.GET.get('search')#获取搜索的关键词 list = Article.objects.filter(title__icontains=ss)#获取到搜索关键词通过标题进行匹配 remen = Article.objects.filter(tui__id=2)[:6] allcategory = Category.objects.all() page = request.GET.get('page') tags = Tag.objects.all() paginator = Paginator(list, 10) try: list = paginator.page(page) # 获取当前页码的记录 except PageNotAnInteger: list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 except EmptyPage: list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 return render(request, 'search.html', locals())
里面要留意的是title__icontains=ss,这话的意思是,用搜索关键词ss和文章标题进行匹配,如果标题包含关键词ss就会被筛选出来,__icontains方法不区分字母大小写。
打开tempates/base.html页面,找到头部的搜索代码,把action的URL修改为下面的:
tempates/base.html action="{% url 'index' %}s/"
打开tempates/search.html页面,对照下面的代码进行修改。
您当前位置:
tempates/search.html <div class="breadcrumb">您的位置: <a itemprop="breadcrumb" href="{% url 'index' %}">首页</a> » <span class="current">关键词:{{ ss }}</span></div>
搜索的关键词:
tempates/search.html <div class="main-title"> <h4 class="post-left-title">关键词:{{ ss }}</h4> </div>
搜索出来的文章列表:
tempates/search.html {% for list in list %} <div class="article-box clearfix excerpt-1"> <div class="col-md-4"> <div class="thumbnail"> <a href="{% url 'index' %}show-{{ list.id }}.html" title="{{ list.title }}"> <img src="{% url 'index' %}media/{{ list.img }}" srcset="{% url 'index' %}media/{{ list.img }}" alt="{{ list.title }}" class="wp-post-image" width="240" height="160"/></a> </div> </div> <div class="col-md-8"> <h2><a href="{% url 'index' %}show-{{ list.id }}.html" target="_blank" title="{{ list.title }}">{{ list.title }}</a></h2> <p class="txtcont hidden-xs"><a href="{% url 'index' %}show-{{ list.id }}.html" target="_blank" title="{{ list.title }}">{{ list.excerpt }}</a></p> <div class="meta"><span class="label label-info"><a href="{% url 'index' %}list-{{ list.category_id }}.html">{{ list.category.name }}</a></span> <time class="item"><i class="fa fa-clock-o"></i>{{ list.created_time|date:"Y年m月d日" }} </time> </div> </div> </div> {% endfor %}
列表分页:
tempates/search.html <div class="pagination"> <ul> {% if list.has_previous %} <li class="prev-page"><a href="{% url 'index' %}s/?search={{ ss }}&page={{ list.previous_page_number }}">上一页</a></li> {% else %} <li class="prev-page"></li> {% endif %} {% for num in list.paginator.page_range %} {% if num %} {% ifequal num list.number %} <li class="active"><span>{{ num }}</span></li> {% else %} <li><a href="{% url 'index' %}s/?search={{ ss }}&page={{ num }}">{{ num }}</a></li> {% endifequal %} {% else %} <li class="disabled"><span>...</span></li> {% endif %} {% endfor %} {% if list.has_next %} <li class="next-page"><a href="{% url 'index' %}s/?search={{ ss }}&page={{ list.next_page_number }}">下一页</a></li> {% else %} <li class="prev-page"></li> {% endif %} </ul> </div>
留意:这里面的分页URL和列表页、标签页的分页URL是不一样的,自己留意对比。然后可以自己尝试修改和列表页面一样的URL结构试试。
搜索页面实现完毕!更多疑问可以加微信:VIPdjango交流!
标签:search,tempates,list,教程,Django,html,搜索,page,页面 From: https://www.cnblogs.com/yoloooo/p/17633831.html