zoukankan      html  css  js  c++  java
  • Django之组合搜索组件(一)

    什么是组合搜索呢?

    比如你想买车,但手里只有10万块!所以你只能在10万块的车里挑选,但你喜欢黑色,因为觉得很高端大气上档次,说白了就是装逼杠杠的!之后售车姐给你拿了个表表,你看到了低于10万块且颜色为黑的各种车!其实这就是组合搜索!

    那运用Django框架,该程序怎么实现呢?

    那就先看看程序吧!

    urls.py
    from app01 import views
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    from django.conf.urls import url
    from django.contrib import admin
    from django.urls import path
    urlpatterns = [
        path('admin/', admin.site.urls),
        url(r'^article-(?P<article_type_id>d+)-(?P<category_id>d+).html',views.article), #定义模板的名字
    
    ]
    models.py
    from django.db import models
    
    class Category(models.Model):          #创建分类表
        caption = models.CharField(max_length=16)
    
    class ArticleType(models.Model):      #创建文章技术语言类
        caption = models.CharField(max_length=16)
    
    class Article(models.Model):         #创建文章表
        title = models.CharField(max_length=32)    #文章标题
        content = models.CharField(max_length=255)   #文章内容
    
        category = models.ForeignKey(to='Category',to_field='id',on_delete=models.CASCADE)         #文章分类
        article_type = models.ForeignKey(to='ArticleType',to_field='id',on_delete=models.CASCADE)   #文章类型
    
        # type_choice = (               #可以替换上面的class ArticleType(models.Model)
        #     (1,'Python'),
        #     (2,'OpenStack'),
        #     (3,'Linux'),
        # )
        # article_type_id = models.IntegerField(choices=type_choice)   #相当于把表type_choice放到内存里
    views.py
    from django.shortcuts import render
    from app01 import models
    
    def article(request,*args,**kwargs):  #可以取任意数
        print(kwargs)                  # kwargs=={'article_type_id': 'v', 'category_id': 'v'}  里面传递了两个参数
        condition = {}                    #创建一个空的字典
        for k,v in kwargs.items():    #{'article_type_id': 'v', 'category_id': 'v'}  k为article_type_id、category_id
            kwargs[k] = int(v)
            if v == '0':                  #如果字典中的值(value)为0时 {'article_type_id': '0', 'category_id': '0'}
                pass
            else:                         #不为0时
                condition[k] = v          # 把v放入到k中 #{'article_type_id': 'v', 'category_id': 'v'}  k为article_type_id、category_id
        # article_type_list = models.ArticleType.objects.all()
        article_type_list = models.ArticleType.objects.all()   #文章技术语言类列表
        category_list = models.Category.objects.all()          #分类
        result = models.Article.objects.filter(**condition)  #按condition内容里的条件进行查找 {'article_type_id': 'v', 'category_id': 'v'}
        return  render(
            request,
            'article.html',
            {
                'result': result,
                'article_type_list': article_type_list,
                'category_list': category_list,
            'arg_dict': kwargs
        } ) 

    # Create your views here.
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .condition a{
                display: inline-block;
                padding: 3px 5px;
                border: 1px solid #dddddd;
                margin: 5px ;
            }
            .condition a.active{
                background-color: brown;
            }
        </style>
    </head>
    <body>
        <h1>过滤条件</h1>
        <div class="condition">
            <div>
                {% if arg_dict.article_type_id == 0 %}
                    <a class="active" href="http://127.0.0.1:8000/article-0-{{ arg_dict.category_id}}.html">全部</a>
                {% else %}
                    <a href="http://127.0.0.1:8000/article-0-{{ arg_dict.category_id}}.html">全部</a>
                {% endif %}
                {% for row in article_type_list %}
                    {% if row.id == arg_dict.article_type_id %}
                        <a class="active" href="http://127.0.0.1:8000/article-{{ row.id }}-{{ arg_dict.category_id}}.html">{{ row.caption }}</a>
                    {% else %}
                        <a  href="http://127.0.0.1:8000/article-{{ row.id }}-{{ arg_dict.category_id}}.html">{{ row.caption }}</a>
                    {% endif %}
                {% endfor %}
            </div>
    
            <div>
                {% if arg_dict.category_id == 0 %}
                    <a class="active" href="http://127.0.0.1:8000/article-{{ arg_dict.article_type_id}}-0.html">全部</a>
                {% else %}
                    <a href="http://127.0.0.1:8000/article-{{ arg_dict.article_type_id}}-0.html">全部</a>
                {% endif %}
                {% for row in category_list %}
                    {% if row.id == arg_dict.category_id %}
                        <a class="active" href="http://127.0.0.1:8000/article-{{ arg_dict.article_type_id }}-{{ row.id}}.html">{{ row.caption }}</a>
                    {% else %}
                        <a  href="http://127.0.0.1:8000/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
                    {% endif %}
                {% endfor %}
            </div>
        <h1>查询结果</h1>
        <ul>
            {% for row in result %}
                <li>{{ row.id }}-{{ row.title }}</li>
            {% endfor %}
        </ul>
    </body>
    </html>


    数据库的表

    Article

    ArticleType

    Category

    前端主页:

  • 相关阅读:
    Beta冲刺 (6/7)
    Beta冲刺(5/7)
    Beta 冲刺 (4/7)
    Beta 冲刺 (3/7)
    软件产品案例分析(团队)
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    java 常用设计模式及Spring中应用了哪些设计模式
    java 八大排序算法
    记录java学习计划及相关工作中用到的技术/工具
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9159661.html
Copyright © 2011-2022 走看看