创建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文件名] %} 即可