Django模板—-自定义过滤器和标签
一、filter和simple_tag
1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
2、在app中创建templatetags模块(模块名只能是templatetags)
3、创建任意 .py 文件,如:my_tags.py
- from django import template
- from django.utils.safestring import mark_safe
- # mark_safe 设置数据安全不转义
- register = template.Library() #register的名字是固定的,不可改变
- @register.filter
- def filter_multi(v1,v2):
- return v1 * v2
- <br>
- @register.simple_tag
- def simple_tag_multi(v1,v2):
- return v1 * v2
- <br>
- @register.simple_tag
- def my_input(id,arg):
- result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
- return mark_safe(result)
4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py
- {% load my_tags %} # load 会循环找所有app下的templatetags下的文件
5、使用simple_tag和filter(如何调用)
- --.html
- {# 先导入我们自定义filter那个文件 #}
- {% load xxx %}
- # num=12
- {# 使用我们自定义的filter #}
- {{ num|filter_multi:2 }} # 24
- {{ num|filter_multi:"[22,333,4444]" }}
- {% simple_tag_multi 2 5 %} 参数不限,但不能放在if for语句中
- {% simple_tag_multi num 5 %}
注意:filter可以用在if等语句后,simple_tag不可以
- {% if num|filter_multi:30 > 100 %}
- {{ num|filter_multi:30 }}
- {% endif %}
二、inclusion_tag
多用于返回html代码片段
先理解include标签,
include 标签
- {% include %} 标签允许在模板中包含其它的模板的内容。
- 下面这个例子都包含了 nav.html 模板
{% include "nav.html" %}
- include标签,定义的模板数据是死的只有模板内容;而过滤器和自定义标签是定义数据的。@register.inclusion_tag可以将这两者结合在一起。
还是在templatetags下的文件中:
web.py:
- from django.template import Library
- import re
- register =Library()
- @register.inclusion_tag("rbac/menu.html")
- def get_menu_styles(request):
- permission_menu_list = request.session.get("permission_menu_list")
- for item in permission_menu_list:
- if re.search("^{}$".format(item["url"]), request.path):
- item["class"] = "active"
- return {"permission_menu_list":permission_menu_list}
数据会先交给rbac/menu.html渲染,再以字符串形式返回;谁调用就传给谁
rbac/menu.html:
- <div class="static-menu">
- {% for item in permission_menu_list %}
- <a href="{{ item.url }}" class="{{ item.class }}">
- <span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.title }}
- </a>
- {% endfor %}
- </div>
可以直接返回渲染后的数据,且解决了代码的复用性,谁用直接调就行
调用::
layout.html :
- {% load web %} <!--调用-->
- {% get_menu_styles request %}
实例:
- 点击标签加入active样式:
- 解决思路1:
- 每一个返回母版的视图函数中:
- permission_menu_list = request.session.get("permission_menu_list")
- for item in permission_menu_list:
- if re.search("^{}$".format(item["url"]), request.path):
- item["class"] = "active"
- 解决思路2: 引入inclusion_tag方法:
- @register.inclusion_tag("rbac/menu.html")
- def get_menu_styles(request):
- permission_menu_list = request.session.get("permission_menu_list")
- for item in permission_menu_list:
- if re.search("^{}$".format(item["url"]), request.path):
- item["class"] = "active"
- return {"permission_menu_list":permission_menu_list}
- 在layout.html中:
- <div class="menu-body">
- {% load web %}
- {% get_menu_styles request %}
- </div>
Django模板—-自定义过滤器和标签的更多相关文章
- Django入门--自定义过滤器与标签
---恢复内容开始--- 为了让Django找到自定义的模板过滤器和模板标签,需要进行文件路径配置,配置方式分为APP目录下配置和项目路径下配置两种方式: 1.在APP目录下配置:针对某个应用特定的自 ...
- Django——5 自定义过滤器及标签
Django 自定义过滤器 自定义标签 简单标签 包含标签 自定义过滤器 自定义过滤器就是一个带有一个或两个参数的Python 函数: - (输入的)变量的值 —— 不一定是字符串形式. - 参数的值 ...
- Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承
Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...
- Django 05 自定义过滤器、自定义标签
Django 05 自定义过滤器.自定义标签 一.自定义过滤器 #1.在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2.在common目录下创建一个t ...
- django自定义过滤器和标签
1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...
- Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{ }} 变量相关{% %} ...
- 小白学习django第三站-自定义过滤器及标签
要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...
- 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)
一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...
- 自定义过滤器和标签 & 静态文件相关
自定义过滤器和标签 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名 ...
随机推荐
- C#通用模块专题
开源 程序设计 常用组件 加载图片,播放音乐.视频,摄像头拍照 文件读写(txt.xml.自定义文件格式(后缀名)) 串口通信 稳定的串口读写:http://blog.csdn.net/kolvin2 ...
- Android UI学习 - ListView (android.R.layout.simple_list_item_1是个什么东西)
Android UI学习 - ListView -- :: 标签:Android UI 移动开发 ListView ListActivity 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...
- html5调用本机摄像头兼容谷歌浏览器高版本,谷歌浏览器低版本,火狐浏览器
做这个功能的时候在网上查了一些资料,代码如下,在这个代码在谷歌浏览器46版本是没问题的,在火狐浏览器也行,但是在谷歌浏览器高版本下是不兼容的 <div id="body"&g ...
- PyInstaller打包成exe可执行文件
PyInstaller 安装pyinstaller 对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定: pip install pyinstaller 通常我们会下载源码 ...
- struts2中s:iterator的使用(2个list嵌套循环)
<s:iterator value="packagePlateTbls" id="plateTbls"> <tr> <td cla ...
- C语言之随机数和字符串输入输出
一.随机数产生函数 1.需要加入头文件 #include<stdlib.h> 和 #include<time.h> 2.Rand是伪随机数产生器,每次调用rand产生的随机数是 ...
- Jquery缩放
$(document).mousemove(function(e) { if (!!this.move) { var posix = !document.move_target ...
- Leetcode:Longest Substring Without Repeating Characters分析和实现
题目大意是传入一条字符串,计算出这样的这样一条子字符串,要求子字符串是原字符串的连续的某一段,且子字符串内不包含两个或两个以上的重复字符.求符合上面条件的字符串中最长的那一条的长度. 首先注意到任意一 ...
- 2-1 CPU多级缓存-缓存一致性.mkv
- XHProf安装使用笔记
编译安装 获取源代码包root@sourcjoy>wget http://pecl.php.net/get/xhprof-0.9.2.tgz解压root@sourcjoy>tar zxf ...