django自定义标签

参考文章:

http://xiao80xiao.iteye.com/blog/519394 (django 自定义标签和过滤器)

http://www.cnblogs.com/btchenguang/archive/2012/09/05/2672364.html#WizKMOutline_1346841868165594 (Django框架学习-Templates进阶用法--下)

自定义标签放在app/templatetags下。下面是3个例子。

自定义标签1(过滤器):

vim test_tags.py

from django.template import Library
register = Library()

@register.filter(‘percent_decimal‘)
def percent_decimal(value):
    value = float(str(value))
    value = round(value, 3)
    value = value * 100

    return str(value) + ‘%‘

#register.filter(‘percent_decimal‘, percent_decimal)

作用是将传过来的小数转换成百分比显示

views.py

def test(request):
    return render_to_response(‘test.html‘)

test.html

{% load test_tags %}
{{ 12.09|percent_decimal}}

前端显示:

自定义标签2:

vim mytag.py

from django import template
register = template.Library()

@register.tag(name=‘mytag‘)
def do_parse(parser,token):
    try:
        tag_name,format_string = token.split_contents()
    except:
        raise template.TemplateSyntaxError("tag error!")
    return Mytag(format_string[1:-1])

class Mytag(template.Node):
    def __init__(self, format_string):
        self.format_string = format_string
    def render(self, context):
        return self.format_string

views.py

def test2(request):
    return render_to_response(‘test2.html‘)

test2.html

<html>
<body>
{% load mytag %}
{% mytag ‘excellent!‘ %}
</body>
</html>

前端显示:

自定义标签3:

vim currenttime_tag.py

from django import template
import datetime
register = template.Library()

class CurrentTimeNode(template.Node):
    def __init__(self, format_string):
        self.format_string = str(format_string)
    def render(self, context):
        now = datetime.datetime.now()
        return now.strftime(self.format_string)
    
def do_current_time(parser, token):
    try:
        tag_name,format_string = token.split_contents()
    except ValueError:
        msg = ‘%r tag requires a single argument‘ % token.split_contents()[0]
        raise template.TemplateSyntaxError(msg)
    return CurrentTimeNode(format_string[1:-1])

register.tag(‘current_time‘, do_current_time)

views.py

def test3(request):
    return render_to_response(‘test3.html‘)

test3.html

<html>
<body>
{% load currenttime_tag %}
{% current_time "%Y-%m-%d %I:%M %p" %}
</body>
</html>

前端显示:

时间: 2024-10-23 06:38:19

django自定义标签的相关文章

django 自定义标签和过滤器

django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个python源文件夹,(即文件夹里面要包含一个__init__.py.)文件夹名为templatetags.  此文件夹便是存放自定义标签和过滤器的源码的地方了. 再如果是在templatetags文件夹中定义了标签,如 test_tags.py,要如何使用我们自定义的test_tags.py呢.很简单,

django自定义标签,int转化为str类型

1.在app中创建templatetags目录,目录名必须为templatetags 2.在目录templatetags中创建一个.py文件,例如 strFilter.py strFilter.py  #强制转换成str from django import template register = template.Library() @register.filter("strVal")   def strVal(value):    return str(value) index.h

django中自定义标签和过滤器

想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1  在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个templatetags的包,并在该包下创建了一个名为mytags的文件.那么目录结构看起来应该就像这样: polls/ __init__.py models.py templatetags/ __init__.py mytags.py views.py 2  settings文件中的INSTALLD_A

Django 自定义模板标签和过滤器

1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和 models.py . views.py 等处于同一层次.例如: books/     __init__.py     models.py     templatetags/     views.py 在 templatetags 中创建两个空文件:一个 __init__.py (告诉Python这是一个包含了Python代码的包)和一个用来存放你自定义的

Django 自定义模版标签和过滤器

实现自定义过滤器 1. 创建register变量 在你的模块文件中,你必须首先创建一个全局register变量,它是用来注册你自定义标签和过滤器的, 你需要在你的python文件的开始处,插入几下代码: from django import templateregister = template.Library() 2. 定义过滤器函数 自定义的过滤器就是一个带1,2个参数的python函数,一个参数放变量值,一个用来放选项值. 比如{{ var|remove:"bar" }}, va

Django的自定义标签

Django提供了自定义标签功能,可以方便常用方法的重复使用. 标签的本质就是函数,标签名就是函数名. 注意点: 1.需要到django.template对象. 2.register = template.Library(),@register.simple_tag作为装饰器. 3.在html中使用标签时,要先{% load blog_tags %},之后才能使用blog_tags.py中的自定义标签. 4.blog_tags.py的项目位置,位于应用目录下的templatetags目录下,te

django自定义过滤器及模板标签

创建一个模板库 不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用. 我们更推荐使用后者,因为你的filter可能在后来的工程中有用. 无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中. 我们稍后会解释这一点. 第二,在适当的Dja

Django自定义模板标签和过滤器

inclusion_tag() 在app中新建一个templatetags包(名字固定,不能变,只能是这个), 和views.py.models.py等文件处于同一级别目录下. 这是一个包!不要忘记创建__init__.py文件以使得该目录可以作为Python的包 1.首先,编写Python函数,templatetags/my_tags.py from django import template register = template.Library() register = Library(

Django(自定义过滤器和自定义标签)

模版是一个用django模版语言标记过的python字符串.模版可以包含模版标签和变量. 模版标签是在一个模版里起作用的标记.比如,一个模版标签可以产生控制结构的内容(if或者for),可以获取数据库内容或者访问其它模版标签. 一个标签块被{%%}包围 变量标签被{{}}包围 context是一个传递给模版的key-value对. 模版渲染是通过从context获取值来替换模版中变量并执行所有的模版标签. 创建自定义标签目录 首先在app底下创建一个templatetags目录,添加一下两个.p