• 自定义代码标签和布局


    自定义代码标签和布局


    1.代码布局:

    • 某个app特有的:
      • 自定的代码一般需放在app目录下的templatetags文件夹
      • 再到templatetags文件夹下创建python模块
    • 公用的
      • 创建一个新的app,将python模块定义到新的app中,在INSTALL_APPS注册,然后就可以使用。

    2.自定义过滤器

    • 过滤器的本质:
      • 函数:一个或两个参数
        • 第一个参数:传递进来的模板变量
        • 第二个参数:普通的参数(可能默认参数,非必须)
    • 过滤器注册
      •  1 from django.template import Library
         2 
         3 register = Library()
         4 
         5 def is_male(value, regular='en'):
         6     way = {
         7         'en': ['','',],
         8         'cn': ['female','male',],
         9     }
        10     return way[regular][value]
        11 
        12 register.filter(is_male)
      • 实例注册:先实例化一个注册的对象,再调用这个对象的filter方法,filter方法传入需要注册的装饰器函数的函数名。
         1 from django.template import Library
         2 
         3 register = Library()
         4 
         5 
         6 @register.filter()
         7 def is_male(value, regular='en'):
         8     way = {
         9         'en': ['','',],
        10         'cn': ['female','male',],
        11     }
        12     return way[regular][value]
        13 
        14 # register.filter(is_male)
      • 通过实例对象的装饰器来完成对过滤器函数的调用。
    • 过滤器的使用
      • 现在html中导入过滤器模块{% load 模块 %}
      • 再像普通过滤器那样调用即可
      • 装饰器函数的第一个参数为所调用的时候传入的值。

    3.自定义模板标签

    • 简单标签
    • 简单标签的定义和自定义过滤器的方式一样
     1 from django.template import Library
     2 from datetime import datetime
     3 
     4 register = Library()
     5 
     6 @register.simple_tag()
     7 def current_time(format_str):
     8     return datetime.now().strftime(format_str)
     9 
    10 
    11 # register.simple_tag(current_time)
    • 调用的是实例对象的simple_tag方法
    • 引用上下文参数:
      • 引用上下文的模板变量(views函数中render传递的context变量的值)
        • 在标签函数的注册方法中将take_tcontext=True。
        • 将标签函数的第一个参数设置为context
     1 from django.template import Library
     2 from datetime import datetime
     3 
     4 register = Library()
     5 
     6 @register.simple_tag(takes_context=True)
     7 def current_time(context):
     8     return datetime.now().strftime(context['format_str'])
     9 
    10 
    11 # register.simple_tag(current_time)

     4.包含标签(嵌套标签)

    • 为避免某一样式重复使用,django提供了包含标签
    • 首先定义样式
      1 <ul>
      2     {% for i in ls%}
      3         <li>{{ i }}</li>
      4     {% endfor %}
      5 </ul>
    • 注册样式
      1 from django.template import Library
      2 
      3 register = Library()
      4 
      5 
      6 # register.simple_tag(current_time)
      7 @register.inclusion_tag('crm/show_list_as_ul.html')
      8 def show_list_as_ul(value):
      9     return {'ls': value}

      使用实例library的实例对象的inclusion_tag方法,该方法接收一个样式的路径的字符串,最后就可以像普通标签一样是使用该样式了。

    • 接收上下文变量和上面一样,将take_context=True,函数的第一个变量设置为context即可!
  • 相关阅读:
    省市区(简版)
    利用 NSSortDescriptor 对 NSMutableArray 排序
    Objective-C 高性能的循环遍历 forin
    iOS-内存管理
    ios-遍历和排序
    寒假 OC-代理,类目,内存,协议,延展,数组,字典,集合
    Oracle SQL篇(二)oracle自连接操作
    Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
    Oracle SQL篇(四)group by 分组与分组的加强 rollup
    ODI中删除数据的处理
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/10655825.html
Copyright © 2020-2023  润新知