zoukankan      html  css  js  c++  java
  • 自定义Django过滤器和标签

    在项目的根目录下创建新的文件夹(与manage.py同级,也就是想当个应用),文件夹名称可自行命名,然后再该文件夹下创建初始化文件__init__.py和templatestags文件夹,templatestags文件夹下创建初始化文件__init__.py文件和自定义标签文件myfilter.py。其中templatestags文件夹文件夹名称是固定不变的。init.py文件中并不需要编写代码。

    配置

    将创建的新文件夹名称加到settings.py的属性INSTALLED_APPS里添加该文件名称。

    编写过滤器

    在myfilter.py文件中编写实现模板上下文的字符替换

    from django import template
    # 创建模版对象
    register = template.Library()
    # 声明并定义过滤器
    @register.filter(name='replace') # 对函数do_replace()由装饰器@register.filterl处理,并对其进行注册操作
    def do_replace(value, agrs):# value代表当前过滤器的模板上下文
        oldValue = agrs.split(':')[0] # args代表过滤器器的参数,函数将过滤器agrs以冒号分隔,用于参数value进行字符串替换操作
        newValue = agrs.split(':')[1]
        return value.replace(oldValue, newValue) # 将处理结果返回
    

    自定义标签

    标签的配置和过滤器的配置一样

    编写自定义标签

    实现标签里的数据进行反转

    from django import template
    # 创建模版对象
    register = template.Library()
    
    # 这个函数实现的思路值得考虑,类传进来的对象是经过下一个函数处理的
    # 定义模版节点类
    class ReversalNode(template.Node):
        def __init__(self, value):
            self.value = str(value)
    
        # 数据反转处理
        def render(self, context):
            return self.value[::-1]
    
    # 声明并定义标签
    '''
    标签名称由装饰器参数name进行命名,如果没有设置参数name就以函数名作为标签名称
    
    '''
    @register.tag(name='reversal')
    # parse是解析器对象,token是被解析的对象
    def do_reversal(parse, token):
        '''
        函数参数parse是解析器对象,当Django运行时,他将所有标签和过滤器进行加载并生成到parse对象
        在解析模板文件里面的标签时,Django就会从parse对象查找对应的标签信息
    
        函数参数token时模板文件使用标签时所传递的数据对象,主要包括标签名和数据内容
        do_reversal对参数token使用split_contents()方法(Django内置方法)进行取值处理,从中获取数据value,并将value传递给
        自定义模板节点类ReversalNode
        '''
        try:
            # tag_name是代表标签名,即reversal
            # value是由标签传递的数据
            tag_name, value = token.split_contents() # 在index.html中传进来的字符串就是这里的token;
            # 然后再把它传给value,再把value传给上面的函数类并返回
        except:
            raise template.TemplateSyntaxError('syntax')
        # 调用自定义的模板节点类
        return ReversalNode(value) #ReversalNode类是将value执行字符串反转处理,并生成模板节点对象,用于模板引擎解析HTML语言
    

    来自Django Web应用开发实战笔记

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    WebStorm 9 配置 Live Edit 功能与浏览器实现同步
    开源JS图片裁剪插件
    cropper手机使用实例
    Laravel中的Storage::disk
    laravel删除文件
    cropper.js移动端使用
    资本的一些运作规律及启示
    laravel文件存储、删除、移动等操作
    解决div和父div不上对齐
    ubuntu14.04如何卸载qq
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15334907.html
Copyright © 2011-2022 走看看