您的位置:首页 > 编程语言 > Go语言

django自定义 过滤器

2012-07-24 15:55 323 查看
我写的博客程序,为了实现一些特殊的功能,需要自己写个过滤器。现在把方法记录下来。

过滤器的功能大概如下,在数据库里取出存储的html代码(各种富文本编辑器保存的代码)。然后取出来展示,做类似于文章列表。在一开始,我们会这样取出来:

{% autoescape off %} {{ post.myContent}} {% endautoescape %}

但是这个时候就会开始加载图片资源(有img标签),如果图片太多,太大,就会使页面加载得太慢。用户体验很差。

也许你会问,为什么不用jquery的lazyload插件,我觉得那是伪的延迟加载,根本无助于减轻服务器的压力。

所以现在需要写个过滤器,在无须加载图片的时候,先使得服务器不用加载图片。

正文如下:

在app目录下,新建一个目录:

templatetags (名字不要搞错

├── filters.py (随便建一个文件,名字随便起

├── filters.pyc

├── __init__.py (这个是自己创建的空文件,只要名字对就行

└── __init__.pyc

现在看内容:

#!/usr/bin/env python
#coding:utf-8

from django import template
register = template.Library()

def cut_imagetags(value):
print value
return value

register.filter('cut_imagetags', cut_imagetags)

自己编写过滤器很简单,只需要两个步骤:
1、定义一个函数,接收至少一个参数,如function(value,arg)
2、使用register.fileter('过滤器名字',函数名) 注册过滤器

接下来就是使用了。
在html文件中:
{% load filters %} //fileters 是过滤器的那个文件名
{% autoescape off %} {{ post.myContent|cut_imagetags}} {% endautoescape %}

先看个没用过滤器之前的例子,加载页面时,服务器端:

[24/Jul/2012 02:35:46] "GET /media/1343066025.950.280283821055DeepinScrot-0444.png HTTP/1.1" 200 43561

[24/Jul/2012 02:35:46] "GET /media/1343066026.890.981396435618DeepinScrot-1556.png HTTP/1.1" 200 57454

[24/Jul/2012 02:35:46] "GET /media/1343066026.030.717419530083DeepinScrot-1029.png HTTP/1.1" 200 339557

看到浏览器向服务器请求了三张图片。

使用了过滤器之后,就没有再请求图片资源了。

自定义过滤器的方法就是如此,就看大家自己要应用在哪些场景上了。

本文出自 “YEELONⒼ ” 博客,请务必保留此出处http://yeelone.blog.51cto.com/1476571/940949
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: