django自定义标签

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/g_optimistic/article/details/89153151

1.新建一个app (非必要但是有用)

在项目的目录下-->右击---->在此处打开命令行

激活Anaconda环境

avtivate djangoPath

在manage.py文件所在的路径下输入命令:

python manage.py startapp Templatetag

2.在app当中创建一个templatetags包

包的标志就是里面有一个__init__.py文件,可以用来初始化导入

3.在templtaetags包下创建过滤器文件tagExample.py

(1)实例化模板库,实例必须叫register

from django import template
register=template.Library()

(2)定义自己的过滤器函数

(3)进行过滤器注册

def dosomething(value,args):
    return value.replace(args,args.upper())
register.filter("replaceUpper",dosomething)

也可以使用装饰器

from django import template
from Student.models import Student

register=template.Library()
def dosomething(value,args):
    return value.replace(args,args.upper())
register.filter("replaceUpper",dosomething)

@register.filter("relaceLower")
def dosomething1(value):
    return value.lower()

@register.filter("relace")
def dosomething2(value,args):
    return value.replace(args,args.upper())

@register.filter("ADD")
def dosomething1(value,args1):
    return int(value)+int(args1)

@register.filter("getStudent")
def dosomething1(value):
    id=int(value)
    stu=Student.objects.filter(id=id).first()
    if stu:
        return True
    else:
        return False
@register.filter("getName")
def getStudent(value):
    id=int(value)
    stu=Student.objects.filter(id=id).first()
    if stu:
        return "欢迎%s登录"%stu.name
    else:
        return "请注册"
import datetime
class CurrentTimeNode(template.Node):
    """
    template.Node提供了HTTPResponse方法
    """
    def __init__(self,formit_string):
        self.formit_string=str(formit_string)
    def render(self,context):
        now=datetime.datetime.now()
        return now.strftime(self.formit_string)
def do_current_time(parser,token):
    """

    :param parser:
    :param token:   标签当中所有的内容
    :return:
    """
    try:
        targename,arg=token.contents.split(None,1)#将标签的内容切分成标签名称和内容两部分
    except ValueError as e:
        raise template.TemplateSyntaxError(str(e))
    else:
        return CurrentTimeNode(arg)#将内容传递给定义好的返回的类

register.tag("current_time",do_current_time)

1》文件内部注册

扫描二维码关注公众号,回复: 6013095 查看本文章

2》在settings.py当中注册

注意django版本,不同版本,配置不同

首先要是忘了django的版本的话,先查看django的版本:

django1.9之前

django1.9-2.0之前

django2.0-

views.py

urls.py

from Student.views import StudentView,templateTag
urlpatterns+=[
    path("stu/",StudentView.as_view()),
    path('templateTag/',templateTag),

]

4.加载过滤器

5.使用过滤器

启动服务器

猜你喜欢

转载自blog.csdn.net/g_optimistic/article/details/89153151