这次的代码为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 templatefrom 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 = '全部' % n2 #生成模板 else: ret = '全部' % n2 else: n1 = arg_dict['category_id'] n2 = arg_dict['article_type_id'] if n1 == 0: ret = '全部' % n2 else: ret = '全部' % n2 return mark_safe(ret) #传送到前端@register.simple_tagdef filter_article_type(article_type_list,arg_dict): ret = [] for row in article_type_list: if row.id == arg_dict['article_type_id']: temp = '%s' %(row.id,arg_dict['category_id'],row.caption,) else: temp = '%s' %(row.id,arg_dict['category_id'],row.caption,) ret.append(temp) return mark_safe(''.join(ret)) #需要进行包装@register.simple_tagdef filter_category(category_list,arg_dict): rat=[] for row in category_list : if row.id == arg_dict['category_id']: temp = '%s' %(arg_dict['article_type_id'],row.id,row.caption,) else: temp = '%s' %(arg_dict['article_type_id'],row.id,row.caption,) rat.append(temp) return mark_safe(''.join(rat)) #需要进行包装
d、在前端的.html文件中
{% load filter %} {% filter_all arg_dict 'article_type_id' %} {% filter_article_type article_type_list arg_dict %}
那接下来就是对simple_tag装饰功能的演示了!
代码和Django之组合搜索组件(一)代码相同,不同的是.html文件了的代码做出了相应的修改和filter.py的创建,具体创建方法我就不在细说了,就用图片演示一下吧!
filter.pyfrom django import templatefrom 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 = '全部' % n2 #生成模板 else: ret = '全部' % n2 else: n1 = arg_dict['category_id'] n2 = arg_dict['article_type_id'] if n1 == 0: ret = '全部' % n2 else: ret = '全部' % n2 return mark_safe(ret) #传送到前端@register.simple_tagdef filter_article_type(article_type_list,arg_dict): ret = [] for row in article_type_list: if row.id == arg_dict['article_type_id']: temp = '%s' %(row.id,arg_dict['category_id'],row.caption,) else: temp = '%s' %(row.id,arg_dict['category_id'],row.caption,) ret.append(temp) return mark_safe(''.join(ret)) #需要进行包装@register.simple_tagdef filter_category(category_list,arg_dict): rat=[] for row in category_list : if row.id == arg_dict['category_id']: temp = '%s' %(arg_dict['article_type_id'],row.id,row.caption,) else: temp = '%s' %(arg_dict['article_type_id'],row.id,row.caption,) rat.append(temp) return mark_safe(''.join(rat)) #需要进行包装
{% load filter %}过滤条件
{% filter_all arg_dict 'article_type_id' %} {% filter_article_type article_type_list arg_dict %}{% filter_all arg_dict 'category_id' %} {% filter_category category_list arg_dict %} {# {% for row in category_list %}#}{# {% if row.id == arg_dict.category_id %}#}{# { { row.caption }}#}{# {% else %}#}{# { { row.caption }}#}{# {% endif %}#}{# {% endfor %}#}查询结果
{% for row in result %}
- { { row.id }}-{ { row.title }}
{% endfor %}
最后的结果也为这样,知识利用simple_tag缩短了html文件的代码量