zoukankan      html  css  js  c++  java
  • Django之组合搜索组件(二)--另附simple_tag的创建使用方法

    这次的代码为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文件的代码量

  • 相关阅读:
    javascript定义变量和优先级的问题
    css expression explaination
    apply()与call()详解
    jquery $(document).ready() 与window.onload的区别
    ES5严格模式
    css margin collapse
    作业 20181016-10 每周例行报告
    作业 20181009-9 每周例行报告
    作业 20180925-1 每周例行报告
    20180925-7 规格说明书-吉林市2日游
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9163226.html
Copyright © 2011-2022 走看看