这次的代码为Django之组合搜索组件(一)的改版,实现的结果和(一)相同,不同的是,这次运用simple_tag方式,使.html程序简化

所以现在就开始编程吧!

首先想使用simple_tag方法,那就先对simple_tag进行配置

a、通过python manage.py startapp app01(app的名字)创建一个app,然后再app的子目录下创建templatetags文件夹,一定是templatetags文件夹,其他名称的文件夹没有用,然后再该文件夹下创建.py文件,在该文件里编写simple_tag装饰

b、要在与工程名字相同的问价里的settings.py文件下找到INSTALLED_APPS,将app01写入,使其进行创建

c、接下来就要开始在templatetags文件夹下编写程序了,例filter.py

from django import template
from django.utils.safestring import mark_safe #包装一下
register = template.Library() @register.simple_tag # 装饰
def filter_all(arg_dict,k): # aig_dict 为前端发送过来的 k为前端传送article_type_id的参数
if k == 'article_type_id':
n1 = arg_dict['article_type_id']
n2 = arg_dict['category_id']
if n1 == 0:
ret = '<a class="active" href="/article-0-%s.html">全部</a>' % n2 #生成模板
else:
ret = '<a href="/article-0-%s.html">全部</a>' % n2
else:
n1 = arg_dict['category_id']
n2 = arg_dict['article_type_id']
if n1 == 0:
ret = '<a class="active" href="/article-%s-0.html">全部</a>' % n2
else:
ret = '<a href="/article-%s-0.html">全部</a>' % n2 return mark_safe(ret) #传送到前端 @register.simple_tag
def filter_article_type(article_type_list,arg_dict):
ret = []
for row in article_type_list:
if row.id == arg_dict['article_type_id']:
temp = '<a class="active" href="/article-%s-%s.html">%s</a>' %(row.id,arg_dict['category_id'],row.caption,)
else:
temp = '<a href="/article-%s-%s.html">%s</a>' %(row.id,arg_dict['category_id'],row.caption,)
ret.append(temp)
return mark_safe(''.join(ret)) #需要进行包装 @register.simple_tag
def filter_category(category_list,arg_dict):
rat=[]
for row in category_list :
if row.id == arg_dict['category_id']:
temp = '<a class="active" href="http://127.0.0.1:8000/article-%s-%s.html">%s</a>' %(arg_dict['article_type_id'],row.id,row.caption,)
else:
temp = '<a href="http://127.0.0.1:8000/article-%s-%s.html">%s</a>' %(arg_dict['article_type_id'],row.id,row.caption,)
rat.append(temp)
return mark_safe(''.join(rat)) #需要进行包装

d、在前端的.html文件中

{% load filter %} <!-- 导入filter.py -->

<!--- 若想使用filter.py里的装饰 则需向下面这样做--->

{% filter_all arg_dict 'article_type_id' %}  <!-- 将article_type_id的参数和arg_dict传送到filter.py文件的filter_all函数里 -->
{% filter_article_type article_type_list arg_dict %} <!-- 将article_type_list和arg_dict传送到filter.py文件的filter_article_type函数里 --> <!---注意:注意:filter可以放在if for语句中,simple_tags不能---->

那接下来就是对simple_tag装饰功能的演示了!

代码和Django之组合搜索组件(一)代码相同,不同的是.html文件了的代码做出了相应的修改和filter.py的创建,具体创建方法我就不在细说了,就用图片演示一下吧!

filter.py
from django import template
from django.utils.safestring import mark_safe #包装一下
register = template.Library() @register.simple_tag # 装饰
def filter_all(arg_dict,k): # aig_dict 为前端发送过来的 k为前端传送article_type_id的参数 if k == 'article_type_id':
n1 = arg_dict['article_type_id']
n2 = arg_dict['category_id']
if n1 == 0:
ret = '<a class="active" href="/article-0-%s.html">全部</a>' % n2 #生成模板
else:
ret = '<a href="/article-0-%s.html">全部</a>' % n2
else:
n1 = arg_dict['category_id']
n2 = arg_dict['article_type_id']
if n1 == 0:
ret = '<a class="active" href="/article-%s-0.html">全部</a>' % n2
else:
ret = '<a href="/article-%s-0.html">全部</a>' % n2 return mark_safe(ret) #传送到前端 @register.simple_tag
def filter_article_type(article_type_list,arg_dict): ret = []
for row in article_type_list:
if row.id == arg_dict['article_type_id']:
temp = '<a class="active" href="/article-%s-%s.html">%s</a>' %(row.id,arg_dict['category_id'],row.caption,)
else:
temp = '<a href="/article-%s-%s.html">%s</a>' %(row.id,arg_dict['category_id'],row.caption,)
ret.append(temp)
return mark_safe(''.join(ret)) #需要进行包装 @register.simple_tag
def filter_category(category_list,arg_dict): rat=[]
for row in category_list :
if row.id == arg_dict['category_id']:
temp = '<a class="active" href="http://127.0.0.1:8000/article-%s-%s.html">%s</a>' %(arg_dict['article_type_id'],row.id,row.caption,)
else:
temp = '<a href="http://127.0.0.1:8000/article-%s-%s.html">%s</a>' %(arg_dict['article_type_id'],row.id,row.caption,)
rat.append(temp)
return mark_safe(''.join(rat)) #需要进行包装
{% load filter %}  <!-- 导入filter.py -->
<!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>
{% filter_all arg_dict 'article_type_id' %} <!-- 将article_type_id的参数和arg_dict传送到filter.py文件的filter_all函数里 -->
{% filter_article_type article_type_list arg_dict %} <!-- 将article_type_list和arg_dict传送到filter.py文件的filter_article_type函数里 -->
</div> <div>
{% filter_all arg_dict 'category_id' %} <!-- arg_dict传动到filter.py文件里 category_id的参数也传送到filter.py文件里 -->
{% filter_category category_list arg_dict %}
{# {% 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>
<h1>查询结果</h1>
<ul>
{% for row in result %}
<li>{{ row.id }}-{{ row.title }}</li>
{% endfor %}
</ul>
</body>
</html>

最后的结果也为这样,知识利用simple_tag缩短了html文件的代码量

Django之组合搜索组件(二)--另附simple_tag的创建使用方法的更多相关文章

  1. Django学习---组合搜索组件

    组合搜索组件 我们都会写博客,写文章之后我们要给文章设置目录,设置类型.之后我们在浏览文章的时候就能够按类别进行精确定位到文章,那这个组合搜索我们应该怎么做呢? 首先我们先创建3张表,分别存放文章,文 ...

  2. Django之组合搜索组件(一)

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

  3. Django实现组合搜索

    一.实现方法 1.纯模板语言实现 2.自定义simpletag实现(本质是简化了纯模板语言的判断) 二.基本原理 原理都是通过django路由系统,匹配url筛选条件,将筛选条件作为数据库查询结果,返 ...

  4. python(Django之组合搜索、JSONP、XSS过滤 )

    一.组合搜索 二.jsonp 三.xss过滤 一.组合搜索 首先,我们在做一个门户网站的时候,前端肯定是要进行搜索的,但是如果搜索的类型比较多的话,怎么做才能一目了然的,这样就引出了组合搜索的这个案例 ...

  5. Django实现组合搜索的方法示例

    目录 一.实现方法 二.基本原理 三.代码样例 方法1:纯模板语言实现 方法二:使用simpletag实现 四.其他变化 1.model定义 2.处理函数变化 3.simpletag相应改变   一. ...

  6. Django中组合搜索功能

    需求分析 很多电商网站中有组合搜索的功能,所谓组合搜索就是网页中组合多个条件,对数据库中进行查询,并且将结果显示在页面中,看个例子吧: 注意红框中的标识,我们可以根据URL来做组合搜索. video- ...

  7. Django 之组合搜索

    现在很多网站都会有这样的组合搜索功能,其实质是几个模型之间组合对数据库进行查询,并将结果显示到页面上. 每一行都是一个模型,模型之间有着连表关系(一对多.多对多等) 模型设计 总共四个模型:分别为方向 ...

  8. Django实现瀑布流,组合搜索

    Django中组合搜索功能 需求分析 很多电商网站中有组合搜索的功能,所谓组合搜索就是网页中组合多个条件,对数据库中进行查询,并且将结果显示在页面中,看个例子吧: 注意红框中的标识,我们可以根据URL ...

  9. django实现瀑布流、组合搜索、阶梯评论、验证码

    django实现图片瀑布流布局 我们在一些图片网站上经常会看到,满屏都是图片,而且图片都大小不一,却可以按空间排列.默认一个div是占用一行,当想把div里的图片并排显示的时候,只能使用float属性 ...

随机推荐

  1. css3 flex属性flex-grow、flex-shrink、flex-basis学习笔记

    最近在研究css3的flex.遇到的flex:1;这一块,很是很纠结,flex-grow.flex-shrink.flex-basis始终搞不清,最经搜集了大量的介绍,应该能算是明白了.网上大部分解释 ...

  2. 用iptables做代理

    出于安全考虑,Linux系统默认是禁止数据包转发的.配置Linux系统的ip转发功能,打开系统转发功能:echo "1" > /proc/sys/net/ipv4/ip_fo ...

  3. JDK1.8 之Lambda

    Lambda 理解的了很久才有一点小感觉. 语法 lambda表达式的特点,它的语法如下面. parameter -> expression body 下面是一个lambda表达式的重要特征. ...

  4. 【Java】JDBCUtil模板

    package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; ...

  5. BMP图像直方图均衡算法(C语言大作业)

    万丈高楼平地起 C语言大作业 一.学习笔记篇 1.学习MarkDown MarkDown注重写作本身,而非花俏的界面 编辑器:vscode 插件:Markdown,Markdown Preview 2 ...

  6. 洛谷 P1233 木棍加工 解题报告

    P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...

  7. 【bzoj2115】【wc2011】Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 5380  Solved: 2249[Submit][Status ...

  8. 随机抽样一致性算法(RANSAC)转载

    这两天看<计算机视觉中的多视图几何>人都看蒙了,转载一些干货看看 转自王先荣 http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac ...

  9. 洛谷P1455 搭配购买

    题目描述 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商品,这个店里有n朵云,云朵已经 ...

  10. count distinct

    SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders