• 自定义过滤器
    • DTL模板语言生来只是为了方便的展示信息,所以与编程语言相比显得有点薄弱,有时候不能满足我们的需求。因此django提供了一个接口,让开发者能自定义标签和过滤器。
    • 首先,你需要添加一个templatetags的文件夹, 自定义过滤器必须处在已经安装了的app中的一个名叫”templatetags”的包(文件夹)中。因此可以有两种选择:
      • 一种是放在其他已经安装了的app中。这种方式简单,但不方便管理。
      • 单独创建一个app,用来存放所有的自己定义的过滤器。 推荐使用
    • ps: templatetags 文件夹名字不能修改,这是django固定死的

1.使用上述第二种创建公用的app utils       ------      工具,在utils app下创建templatetags包固定名称,  ps:不要丢失 __init__.py  否则模板中加载不到

在templatetags下创建xxx.py文件,编写过滤器

2.py文件中   utils.templatetags.xxx.py

# coding=utf-8
from django import template # 代表该文件是自定义标签名 register固定写法
register = template.Library() # html模板中调用{{ msg|myCut:'args' }} 需要导入该py文件 {% load py_file_name %}
@register.filter  # 过滤器装饰器
def myCut(value, args):
# 根据需求编写代码
return u'自定义过滤器某些字符返回小写: %s' % (value.replace(args, '').lower()) # python2默认ascill码 u'中文' unicode, pyhon3默认unicode

3.***需要在settings文件中导入该app  utils

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'utils', # 创建自定义过滤器需要引入该app
]

 自定义标签:

引用上述第二步pyfile:

@register.simple_tag
def current_time(time_geshi):  #html模板中调用 {% current_time '%Y-%m-%d %}
return datetime.now().strftime(time_geshi)

自定义包含标签

应用场景:重复出现在html页面中的动态数据,而其他页面需要include 这个页面,会引用一次,需要在view中传值一次。

而将数据定义在包含标签,通过装饰器@register.inclusion_tag("my_menu11.html") 指定一个页面接收该数据,其他所有页面都可以通过 定义的{% my_menu %}去调用,类似 {% include "my_menu11.html"%}的效果.    ps需要先加载该包含标签Py文件 {% load pyfilename %}

引用上述第二步pyfile:

@register.inclusion_tag("my_menu.html") #将返回值传给my_menu.html渲染 在将my_menu11.html引用给目标html。  ps:在目标html中使用 {% my_menu %}引用
def my_menu(): # 不加参数 # 类似在目标html使用{% include my_menu.html %}
menu = {'a', 11, 'name': 'xiaom', 'age': 18}return {'menu': menu}

my_menu11.html

{% for m,v in menu.items %}
{{ m }}: {{ v }}
{% endfor %}

渲染的目标html中使用 {% my_menu %}引用

{% load custom %}    加载自定义包含标签py文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
自定义包含标签<br>{% my_menu %}<br>
</body>
</html>

django-DIL模板自定义过滤器,自定义标签,自定义包含标签的更多相关文章

  1. 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 (课堂笔记)

    自定义标签同自定义过渡器一样,要创建文件,在配置文件中以APP方法注册,对方法进注册,在 html 文件中引入,.. 由模板传参 在 在配置文件中改时区: 由视图函数传参 包含标签: 当有这种重复的代 ...

  2. 创建 AngularJS 自定义过滤器,带自定义参数

    Angularjs过滤器是 angularjs非常棒的特性之一.有朝一日,你可能需要使用自定义过滤器,幸运的是,你找到了这篇博文. 下面显示的是自定义过滤器长什么样子(请注意myfilter): &l ...

  3. day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置

    目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...

  4. django第六天(模板相关,过滤器和标记)

    django第6天 DTL简介 django template language django模板语言 语法: filter{{}} tag{% %} 简单变量的使用 视图函数可以通过两种方式将变量船 ...

  5. django的模板系统过滤器笔记

    -------------------django内建的过滤器-------------------1.add 使用形式为:{{ value | add: "2"}}意义:将val ...

  6. Django标签之包含标签Inclusion tags

    Django过滤器和标签功能很强大,而且支持自定义标签,很是方便:其中一种标签是Inclusion tags,即包含标签,个人感觉比较反人类的 包含标签(Inclusion tags)通过渲染其他的模 ...

  7. django之模板系统 --》内容(filter过滤器、tags标签【for、if、with】、母板以及继承、crf_token、注释、组件、静态文件【load static】、get_static_prefix、自定义标签和tag)

    常用: Django模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作. 变量 {{ 变量名 }} 变量名由字母数字和下 ...

  8. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  9. python的Web框架,Django自定义过滤器及标签

    代码布局 有的时候框架给的过滤器不够用,需要自定义一些过滤器,所以就需要我们自己来定义一些过滤器等 自定义代码放置的路径 某个app特用(独有)的 - app 目录下的 templatetags文件夹 ...

  10. flask的自定义过滤器

    过滤器的本质是函数.当模板内置的过滤器不能满足需求,可以自定义过滤器.自定义过滤器有两种实现方式: 一种是通过Flask应用对象的 add_template_filter 方法 通过装饰器来实现自定义 ...

随机推荐

  1. java中interrupt、join、sleep、notify、notifyAll、wait详解

    首先介绍一下中断概念:举个例子容易理解一点 例子:假如你正在给朋友写信,电话铃响了.这时,你放下手中的笔,去接电话.通话完毕,再继续写信.这个例子就表现了中断及其处理过程:电话铃声使你暂时中止当前的工 ...

  2. Android之提示Toast

    步骤: 设置监听事件步骤1.事件源,如按键 btn_simple2.事件 OnClick3.监听器new OnClickListener3.绑定事件源与事件 setOnClickListener(ne ...

  3. C# DataTable Compute方法的使用

    在开发中需要对DataTable的数据进行处理,比如累加,求最大最小及平均值等,以前都采用手工对DataTable进行循环并计算的方式,现在发现DataTable的Compute方法可以轻松实现这些功 ...

  4. DataReader 绑定DataGridView有两种方式

    第一种:借助于BindingSourcesqlDataReader Sdr=通过查询函数得到的sqlDataReader类型的数据;BindingSource Bs=new BindingSource ...

  5. 297. Serialize and Deserialize Binary Tree *HARD*

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  6. python socket 编程(TCP与UDP)

    实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...

  7. 字典序全排列(java实现)

    import java.util.Arrays; /** *字典序全排列 *字符串的全排列 *比如单词"too" 它的全排列是"oot","oto&q ...

  8. 升级安装windows8.1以后windowsphone8不能启动虚拟机的办法

    如果之前在的虚拟机是OK的话,VS2012需要安装update3补丁才可以. 下载地址:http://download.microsoft.com/download/D/4/8/D48D1AC2-A2 ...

  9. Alpha冲刺一 (10/10)

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10034872.html 作业博客:https://edu.cnblogs.com/campus ...

  10. 错误 1 类,结构或接口成员声明中的标记"="无效

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...