创建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>


效果:

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


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

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


相关文章:

  • 2021-10-28
  • 2021-07-29
  • 2021-09-21
  • 2021-10-08
  • 2021-08-19
  • 2022-01-27
  • 2022-12-23
  • 2021-09-07
猜你喜欢
  • 2021-07-10
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-07
  • 2022-12-23
相关资源
相似解决方案