{ { item.date|date:'Y-m-d H:i:s' }}这种筛选器的效果是打印出 年 月 日 小时 分钟 秒
{ { archive }}
这个截取到底是怎么截取的?
就是根据存储字符串从起始位置开始截取
自定义过滤器:
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当中进行设置
- {% for archive in archive_list %}
- {% endfor %}
这样设置后网页上不会出现需要显示的归档信息,原因是编码问题
import sys reload(sys) sys.setdefaultencoding('utf-8')导入这个在models.py里面就可以了
python在解码的时候默认 以ASCLL码的方式进行解码后面可以忽略 靠,今天实在是太粗心了,好恶心,就这么几分钟就能搞定的事情,花了我近一个小时,日
url(r'^archive/$',archive,name='archive')
url配置的时候,前面要加上 ^ 后米加上/$ $不会影响传入的参数
配置archive.html
复制了index.html到archive.html当中,在views.py写下archive的函数,
在url当中进行引用,再到base.html当中进行设置
使点击分类文章时会跳转到archive.html当中, 再到views.html当中进行设置其逻辑结构
将index函数里面的分页查询的代码拷贝下来,就可以显示内容了
article_list = Article.objects.filter(date_publish__icontains=year+'-'+month)
修改查询的操作,这样只会照到指定参数的内容
到archieve.html当中做一些修改
{ { request.GET.year }}/{ { request.GET.month }}归档文章
发现在这里也可以使用传进来的参数
这里需要传入参数,因为QuerySet查询是惰性的,不会一下子查询出所有的记录只会查询出当前页面的内容,所以当跳转页面的时候,应该重新传入参数
自定义过滤器:
定义一个myfilter.py文件
from django import template register = template.Library()
导入template库,从Library获得register注册对象,用来注册过滤器
使用自定义过滤器的时候需要导入过滤器文件{% load{ { article.date_publish | month_to_upper }}
在blog下面定义一个templatetags包,myfilter %}
def month_to_upper(key): return ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'][key.month-1]
然后注册过滤器# register.filter('month_to_upper', month_to_upper)
或者@register.filter