一、filter和simple_tag

1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

2、在app中创建templatetags模块(模块名只能是templatetags)

3、创建任意 .py 文件,如:my_tags.py

  1. from django import template
  2. from django.utils.safestring import mark_safe
  3.  
  4. # mark_safe 设置数据安全不转义
  5.  
  6. register = template.Library() #register的名字是固定的,不可改变
  7.  
  8. @register.filter
  9. def filter_multi(v1,v2):
  10. return v1 * v2
  11. <br>
  12. @register.simple_tag
  13. def simple_tag_multi(v1,v2):
  14. return v1 * v2
  15. <br>
  16. @register.simple_tag
  17. def my_input(id,arg):
  18. result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
  19. return mark_safe(result)

4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py

  1. {% load my_tags %}  # load 会循环找所有app下的templatetags下的文件

5、使用simple_tag和filter(如何调用)

  1. --.html
  2. {# 先导入我们自定义filter那个文件 #}
  3. {% load xxx %}
  4.  
  5. # num=12
  6. {# 使用我们自定义的filter #}
  7. {{ num|filter_multi:2 }} # 24
  8.  
  9. {{ num|filter_multi:"[22,333,4444]" }}
  10.  
  11. {% simple_tag_multi 2 5 %} 参数不限,但不能放在if for语句中
  12. {% simple_tag_multi num 5 %}

注意:filter可以用在if等语句后,simple_tag不可以

  1. {% if num|filter_multi:30 > 100 %}
  2. {{ num|filter_multi:30 }}
  3. {% endif %}
  1.  

二、inclusion_tag

多用于返回html代码片段

先理解include标签,

include 标签

    • {% include %} 标签允许在模板中包含其它的模板的内容。
    • 下面这个例子都包含了 nav.html 模板
      {% include "nav.html" %}​
  1. include标签,定义的模板数据是死的只有模板内容;而过滤器和自定义标签是定义数据的。@register.inclusion_tag可以将这两者结合在一起。
    还是在
    templatetags下的文件中:
    web.py:
  1. from django.template import Library
  2. import re
  3. register =Library()
  4.  
  5. @register.inclusion_tag("rbac/menu.html")
  6. def get_menu_styles(request):
  7. permission_menu_list = request.session.get("permission_menu_list")
  8. for item in permission_menu_list:
  9. if re.search("^{}$".format(item["url"]), request.path):
  10. item["class"] = "active"
  11.  
  12. return {"permission_menu_list":permission_menu_list}

数据会先交给rbac/menu.html渲染,再以字符串形式返回;谁调用就传给谁

rbac/menu.html:

  1. <div class="static-menu">
  2.  
  3. {% for item in permission_menu_list %}
  4. <a href="{{ item.url }}" class="{{ item.class }}">
  5. <span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.title }}
  6. </a>
  7. {% endfor %}
  8.  
  9. </div>

可以直接返回渲染后的数据,且解决了代码的复用性,谁用直接调就行

调用::

layout.html :

  1. {% load web %} <!--调用-->
  2. {% get_menu_styles request %}

实例:

  1. 点击标签加入active样式:
  2.  
  3. 解决思路1:
  4. 每一个返回母版的视图函数中:
  5. permission_menu_list = request.session.get("permission_menu_list")
  6. for item in permission_menu_list:
  7. if re.search("^{}$".format(item["url"]), request.path):
  8. item["class"] = "active"
  9.  
  10. 解决思路2: 引入inclusion_tag方法:
  11. @register.inclusion_tag("rbac/menu.html")
  12. def get_menu_styles(request):
  13. permission_menu_list = request.session.get("permission_menu_list")
  14. for item in permission_menu_list:
  15. if re.search("^{}$".format(item["url"]), request.path):
  16. item["class"] = "active"
  17.  
  18. return {"permission_menu_list":permission_menu_list}
  19.  
  20. layout.html中:
  21. <div class="menu-body">
  22.  
  23. {% load web %}
  24. {% get_menu_styles request %}
  25.  
  26. </div>
  1.  

Django模板—-自定义过滤器和标签的更多相关文章

  1. Django入门--自定义过滤器与标签

    ---恢复内容开始--- 为了让Django找到自定义的模板过滤器和模板标签,需要进行文件路径配置,配置方式分为APP目录下配置和项目路径下配置两种方式: 1.在APP目录下配置:针对某个应用特定的自 ...

  2. Django——5 自定义过滤器及标签

    Django 自定义过滤器 自定义标签 简单标签 包含标签 自定义过滤器 自定义过滤器就是一个带有一个或两个参数的Python 函数: - (输入的)变量的值 —— 不一定是字符串形式. - 参数的值 ...

  3. Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承

    Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...

  4. Django 05 自定义过滤器、自定义标签

    Django 05 自定义过滤器.自定义标签 一.自定义过滤器 #1.在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2.在common目录下创建一个t ...

  5. django自定义过滤器和标签

    1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...

  6. Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)

    摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{     }}    变量相关{% %}    ...

  7. 小白学习django第三站-自定义过滤器及标签

    要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...

  8. 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)

    一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...

  9. 自定义过滤器和标签 & 静态文件相关

    自定义过滤器和标签 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名 ...

随机推荐

  1. Python基础学习五 内置函数

    1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...

  2. sftp put权限不够

    报错如下: sftp> put play.zip ./ Uploading play.zip to /opt/library/./play.zip remote open("/opt/ ...

  3. Windows下安装配置免安装MySQL5.7服务器

      Windows下安装配置免安装MySQL5.7服务器 1.下载.解压安装包 从MySQL官方网站上下载mysql-5.7.19-winx64.zip 下载完成后,把安装包解压到D:\DevSoft ...

  4. printf 的格式

    1) 类型类型字符用以表示输出数据的类型,其格式符和意义如下表所示: %c  输出单个字符 %s  输出字符串 %u  以十进制形式输出无符号整数 %d  以十进制形式输出带符号整数(正数不输出符号) ...

  5. sql2012新的系统函数&分析函数

    一 .系统函数 1.字符串类函数:不用判断类型和NULL的字符串连接CONCAT函数 SQL Server本来对字符串的连接很简单,直接使用“+”号,但是需要注意两个问题,一是必须类型都是字符串类型, ...

  6. 设置html页面不被浏览器缓存

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" ...

  7. SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架

    1 JDK动态代理详解 静态代理.JDK动态代理.Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文. 1.1 JDK代理的基本步骤 >通过实现InvocationHandler接口来 ...

  8. Mask_RCNN caffe2

    cd DETECTRON/detectron/ python2 tools/infer_simple_ip_camera.py \    --cfg configs/12_2017_baselines ...

  9. webservice CXF 相关面试题

    Web Service的优点(1) 可以让异构的程序相互访问(跨平台)(2) 松耦合(3) 基于标准协议(通用语言,允许其他程序访问) 1:WEB SERVICE名词解释.JSWDL开发包的介绍.JA ...

  10. Linux编译提速

    一.简介 项目越来越大,重新编译整个项目是一件很费时的事,总结可以帮助提速方法,如下: 1)tmpfs: 解决IO瓶颈,充分利用本机内存资源 2)make -j: 充分利用本机计算资源 3)distc ...