zoukankan      html  css  js  c++  java
  • 过滤器 自定义查询

    {{ item.date|date:'Y-m-d H:i:s' }}这种筛选器的效果是打印出 年 月 日 小时 分钟 秒
    <p><span class="tutime font-size-18"><a href='{% url 'archive' %}?year={{ archive slice:":4" }}&month={{ archive slice:"5:7" }}'>{{ archive }}</a></span></p>
    这个截取到底是怎么截取的?

    就是根据存储字符串从起始位置开始截取

    
    
    自定义过滤器:
    DoseNotExist异常,如果使用get没有获得对象,那么返回一个DoseNotExist异常
    safe过滤器,把html转换成页面信息,不会直接打印出来
    在templatetags包里面定义一个html使用的时候需要加载到html当中
    在此html当中
    from django import template
    register = remplate.Library()
     
    @register.filter
    def month_to_upper(key):
        return[] [key.month-1]
     
    register.filter('month_to_upper',month_to_upper)

    自定义筛选器

    在app下定义一个templatetags包,创建要写的筛选器.py文件

     

    from django import template
    register = template.Library()
    def percent(value):
    return value +'%'
    register.filter(percent)
    使用之前先load
    {% load percent %}
    <li>today is {{datetime | date:'Y-m-d' | percent}}</li>
     
    过滤器还可以组合起来是用,不同的组合还会有不同的效果
    直接把blog里面定义过来的filter拷贝过来看
    # -*- coding: utf-8 -*-
    from django import template
    register = template.Library()
     
    # 定义一个将日期中的月份转换为大写的过滤器,如8转换为八
    @register.filter
    def month_to_upper(key):
    return['一','二','三','四','五','六','七','八','九','十','十一','十二'][key.month-1]
     
    # 注册过滤器
    # register.filter('month_to_upper', month_to_upper)
    跟定义标签类似,但实现的功能更为强大
    
    
    
    
    自定义文章model的管理器,因为想要实现按年月吧文章归档的操作实现不了,所以自定义一个model来实现这个功能有两种方式 1:新加一个数据处理的方法2.改变原有的queryset,就是重新定义这个方法,改变这个方法的返回主要使用第一种方法
    在models.py里面自定义Model管理器
    class ArticleManager(models.Manager):
    distinct_date_list = []
        def distinct_date(self):
    date_list = self.values('date_publish')
    #把日期的结果取出来
    for date in date_list:
    date = date['date_publish'].strftime('%Y%m文章存档')
    if date not in distinct_date_list:
    distinct_date_list.append(date)
    return distinct_date_list
    在Article的类中进行设置
    objects = ArticleManager()
    再views.py里面进行设置archive_list = Article.objects.distinct_date()
    
    
    在base.html当中进行设置
    <ul>
    {% for archive in archive_list %}
    <li>
    <p><span class="tutime font-size-18"><a href=''>{{ archive }}</a></span></p>
    </li>
    {% endfor %}
    </ul>
    这样设置后网页上不会出现需要显示的归档信息,原因是编码问题
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    导入这个在models.py里面就可以了
    http://blog.csdn.net/crazyhacking/article/details/39375535
    http://blog.csdn.net/intel80586/article/details/8566057
    python在解码的时候默认 以ASCLL码的方式进行解码




    后面可以忽略靠,今天实在是太粗心了,好恶心,就这么几分钟就能搞定的事情,花了我近一个小时,日
    url(r'^archive/$',archive,name='archive') 

    url配置的时候,前面要加上 ^ 后米加上/$  $不会影响传入的参数
    配置archive.html
    复制了index.html到archive.html当中,在views.py写下archive的函数,
    在url当中进行引用,再到base.html当中进行设置
    <p><span class="tutime font-size-18"><a href='{% url 'archive' %}?year={{ archive | slice:":4" }}&month={{ archive | slice:"5:7" }}'>{{ archive }}</a></span></p>
    使点击分类文章时会跳转到archive.html当中,再到views.html当中进行设置其逻辑结构
    将index函数里面的分页查询的代码拷贝下来,就可以显示内容了
    article_list = Article.objects.filter(date_publish__icontains=year+'-'+month)
    修改查询的操作,这样只会照到指定参数的内容
    到archieve.html当中做一些修改
    <h2>{{ request.GET.year }}/{{ request.GET.month }}归档文章</h2>
    发现在这里也可以使用传进来的参数
    这里需要传入参数,因为QuerySet查询是惰性的,不会一下子查询出所有的记录只会查询出当前页面的内容,所以当跳转页面的时候,应该重新传入参数
     
    
    
    自定义过滤器:
    
    
    定义一个myfilter.py文件
    from django import template
    register = template.Library()
    导入template库,从Library获得register注册对象,用来注册过滤器
    使用自定义过滤器的时候需要导入过滤器文件{% load <div class="month">{{ article.date_publish month_to_upper }}</div>
    在blog下面定义一个templatetags包,myfilter %}
    def month_to_upper(key):
    return ['', '', '', '', '', '', '', '', '', '', '十一', '十二'][key.month-1]
    然后注册过滤器# register.filter('month_to_upper', month_to_upper)
    或者@register.filter
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    





  • 相关阅读:
    datagrid column width in silverlight.
    Dir你肿么了?是肿了么?越来越大?
    tut12几个简单的帧控制
    CreateThread(), _beginthread()和_beginthreadex()
    windows进程优先级
    Lingo06 Handler
    Lingo13 和Flash交互之getURL
    关于define活生生的SB实例,挂起来
    几个Director/Lingo站
    Lingo02 List
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749564.html
Copyright © 2011-2022 走看看