组合搜索框的实现

本文介绍如何在Django项目中创建自定义模板过滤器,并展示了如何使用这些过滤器来实现文章类型、类别及标签筛选功能。通过具体代码实例,读者可以了解到自定义过滤器的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在当前APP目录下新建templatetags目录:

新建任意名字python名字,然后前端里面的写法是现在html页面开头导入:

{% load filter %}
 <div class="cotent-head1"><i class="fa fa-search" aria-hidden="true"></i>搜索条件</div>
    <div class="cotent-searh" >
        <ul class="nav nav-pills">
        {% filter_all argdict "article_type_id" %}

        {% filterother argdict 'article_type_id' type_choice_list %}

        </ul>
    </div>
    <div class="cotent-searh" >
        <ul class="nav nav-pills">
        {% filter_all argdict "category_id" %}

        {% filterother argdict 'category_id' blogobj.category.all %}

        </ul>
    </div>
    <div class="cotent-searh" >
        <ul class="nav nav-pills">
        {% filter_all argdict "tags__nid" %}

        {% filterother argdict 'tags__nid' blogobj.tag.all %}

        </ul>
    </div>

  

filter文件内容

from django import template
from django.utils.safestring import mark_safe

register = template.Library()


@register.simple_tag
def filter_all(argdict,typeid):
    TYPE_LIST = {'article_type_id':argdict['article_type_id'],
                 'category_id':argdict['category_id'],
                 'tags__nid':argdict['tags__nid'],
                 }
    for row in TYPE_LIST.keys():
        if row == typeid:
            TYPE_LIST[row] = 0
    TYPE_LIST = tuple(TYPE_LIST.values())
    if argdict[typeid] == 0:
        ret = '<li role="presentation" class="active"><a href="/backend/article-%s-%s-%s-0.html">全部</a></li>'%TYPE_LIST
    else:
        ret = '<li role="presentation" ><a href="/backend/article-%s-%s-%s-0.html">全部</a></li>'%TYPE_LIST
    return mark_safe(ret)

@register.simple_tag
def filterother(argdict,typeid,typelist):
    TYPE_DICT= {'article_type_id': argdict['article_type_id'],
                 'category_id': argdict['category_id'],
                 'tags__nid': argdict['tags__nid'],
                 }
    type_list=[]
    for row in typelist:
        try:
            type_id= row['nid']
        except Exception:
            type_id = row.nid

        for i in TYPE_DICT.keys():
            if i == typeid:
                    TYPE_DICT[i] = type_id
        list1 = list(TYPE_DICT.values())
        try:
             str1 = row['title']
        except Exception:
            str1 = row.title
        list1.append(str1)
        TYPE_LIST = tuple(list1)
        if argdict[typeid] == type_id:
            ret = '''<li role="presentation" class="item active" >
            <a href="/backend/article-%s-%s-%s-0.html">
            %s</a></li>'''%TYPE_LIST
        else:
            ret = '''<li role="presentation" class="item" >
                        <a href="/backend/article-%s-%s-%s-0.html">
                        %s</a></li>''' % TYPE_LIST
        type_list.append(ret)
    type_str = ''.join(type_list)
    return mark_safe(type_str)

  

转载于:https://www.cnblogs.com/qiangayz/p/9221228.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值