Django实现组合搜索

栏目: Python · 发布时间: 8年前

内容简介:Django实现组合搜索
一、实现方法

1.纯模板语言实现

2.自定义simpletag实现(本质是简化了纯模板语言的判断)

二、基本原理

原理都是通过django路由系统,匹配url筛选条件,将筛选条件作为数据库查询结果,返回给前端。

例如:路由系统中的url格式是这样:

url(r'^article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html',views.filter)

其中article_type_id和category_id和数据库中字段是相对应的,此时当一个url为article-1-2.html时候,后台处理函数的参数将是一个字典{'article_type_id': 1, 'category_id': 1},然后将该条件作为数据库查询条件,最后得出结果返回给前端

三、代码样例

方法1:纯模板语言实现

urls.py

#!/usr/bin/env python3
#_*_ coding:utf-8 _*_
#Author:wd
from django.conf.urls import url

from . import views
urlpatterns = [
    url(r'^$',views.index),
    url(r'^article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html',views.filter),
]

models.py

from django.db import models

class Category(models.Model):
    caption=models.CharField(max_length=64)

class Article_type(models.Model):
    caption=models.CharField(max_length=64)

class Article(models.Model):
    title=models.CharField(max_length=64)
    content=models.CharField(max_length=256)
    category=models.ForeignKey(to='Category')
    article_type=models.ForeignKey(to='Article_type'

views.py

def filter(request,*args,**kwargs):
    if request.method=="GET":
        condition={}
        for k,v in kwargs.items():
                    kwargs[k]=int(v)  #模板if判断row.id是数字,所以这里需要转换
                    if v=="0":#当条件为0代表所选的是全部,那么就不必要加入到过滤条件中
                        pass
                    else:
                        condition[k]=int(v)
        aritcle=models.Article.objects.filter(**condition)
        aritcle_type=models.Article_type.objects.all()
        aritcle_category=models.Category.objects.all()
        return  render(request,'search.html',{
            'aritcle':aritcle,
            'article_type':aritcle_type,
            'article_category':aritcle_category,
            'article_arg':kwargs,#将当前的筛选条件传递给html
        })

html模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .container a{
            display: inline-block;
            padding: 3px 5px;
            margin: 5px;
            border: 1px solid #dddddd ;
        }
        .active{
            background-color: rebeccapurple;

        }
    </style>
</head>
<body>
<h1>搜索条件</h1>
<div class="container">
    {% if article_arg.article_type_id == 0 %}
        <a class="active" href="/cmdb/article-0-{{ article_arg.category_id }}.html">全部</a>
    {% else %}
         <a  href="/cmdb/article-0-{{ article_arg.category_id }}.html">全部</a>
    {% endif %}
    {% for row in article_type %}
        {% if row.id == article_arg.article_type_id %}
            <a class="active" href="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html">{{ row.caption }}</a>
        {% else %}
            <a  href="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html">{{ row.caption }}</a>
        {% endif %}
    {% endfor %}
</div>
<div class="container">
     {% if article_arg.category_id == 0 %}
        <a class="active" href="/cmdb/article-{{ article_arg.article_type_id }}-0.html">全部</a>
    {% else %}
          <a  href="/cmdb/article-{{ article_arg.article_type_id }}-0.html">全部</a>
    {% endif %}
    {% for row in article_category %}
        {% if row.id == article_arg.category_id %}
        <a class="active" href="/cmdb/article-{{ article_arg.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
        {% else %}
        <a href="/cmdb/article-{{ article_arg.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
        {% endif %}
    {% endfor %}
</div>
<h1>查询结果</h1>
<div>
    {% for row in aritcle %}
        <div>{{ row.id }}-{{ row.title }}</div>
    {% endfor %}
</div>
</body>
</html>

方法二:使用simpletag实现


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2006-12-28 / USD 59.95

Web mining aims to discover useful information and knowledge from the Web hyperlink structure, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is n......一起来看看 《Web Data Mining》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具