Django框架学习笔记(30.组合搜索组件源码)

创建Django工程以及app,注册配置完成:

urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html', views.article, name='article'),
]

models.py(makemigrations,migrate):

from django.db import models

# Create your models here.

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(Category, on_delete=models.CASCADE)
    article_type = models.ForeignKey(ArticleType, on_delete=models.CASCADE)

在数据库中写入一些,以方便展示:


views.py:

from django.shortcuts import render
from app01 import models
from django.urls import reverse

def article(request, *args, **kwargs):
    url = reverse('article', kwargs=kwargs)
    condition = {}
    for k, v in kwargs.items():
        kwargs[k] = int(v)
        if v == '0':
            pass
        else:
            condition[k] = v
    article_type_list = models.ArticleType.objects.all()
    category_list = models.Category.objects.all()
    result = models.Article.objects.filter(**condition)
    #if condition is none,it can find all
    return render(request, 'article.html',
                  {'result': result,
                   'article_type_list': article_type_list,
                   'category_list': category_list,
                   'arg_dict': kwargs})


article.html:

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

        .condition a.active {
            background-color: aqua;
        }
    </style>
</head>
<body>
<h1>过滤条件</h1>
<div class="condition">
    <div>
        {% if arg_dict.article_type_id == 0 %}
            <a class="active" href="/article-0-{{ arg_dict.category_id }}.html">全部</a>
        {% else %}
            <a href="/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="/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption }}</a>
            {% else %}
                <a href="/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="/article-{{ arg_dict.article_type_id }}-0.html">全部</a>
        {% else %}
            <a href="/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="/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
            {% else %}
                <a href="/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
            {% endif %}
        {% endfor %}
    </div>
</div>
<h1>查询结果</h1>
<ul>
    {% for row in result %}
        <li>{{ row.id }}-{{ row.title }}</li>
    {% endfor %}
</ul>
</body>
</html>


效果:



还可以用以前说过的simple_tag方法

创建一个文件夹templatetags,创建一个python文件,然后在HTML开头  {% load [python文件名] %} 即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值