代码布局(自定义的代码,放在哪里) 二种方式:
1. 某个app特有的
-app 目录下,templatetags 文件夹     ** 必需是这个名称的包(目录中有__init__.py文件)
-再到 templatetags 文件夹下创建python模块(py文件)
2. 定义复用
-创建一个新的app,将他们定义在新的app中,在INSTALL_APPS
注册,然后就可以应用

  -在 templatetags 文件夹下新建  tags.py   #文件名自己取

  以下为文件内容:

# 自定义模板标签 和 过滤器

from django.template import Library

def to_male(value, arg='zh'):
dic = {
'zh': ('女', '男'),
'en': ('famle', 'male')
}
return dic[arg][value] register = Library() # 实例化 Library对象, *****变量名 必须为:register
register.filter('to_male', to_male)
{% load static %}  # 加载 静态文件路径设置
{% load tags %} # 加载 自定义<过滤器和 模板标签>库 <div>
<table class="table">
<tr>
<td>序号</td>
<td>名字</td>
<td>性别</td>
<td>年龄</td>
</tr>
{#for 模板 endfor#}
{% for stu in student %}
{# if 模板 endif #}
<tr {% if stu.sex == '' %}style="color:red" {% endif %}>
{# url模板 传url 和参数#}
<td ><a href="{% url 'student:detail' stu.id %}">{{ stu.id }}</a></td>
<td>{{ stu.name}}</td>
<td>{{ stu.sex|to_male }}</td>
<td>{{ stu.age }}</td>
</tr>
{% endfor %}
</table>
</div>

运行!

开门红 : 报错   自定义过滤器没有注册

解决方案:

settings.py  templates:中增加:

定义一个包含标签inclusion_tag
# 定义一个包含标签inclusion_tag

def show_list_as_ul(value):  # value 接收来自 context的变量 ,前提:注册时 takes_context=True
return {'ls': value} # 将 value 转换成一个ls, 变量传递给 html模板 register.inclusion_tag(name='show_list_as_ul', filename='../templates/show_list_as_ul.html', takes_context=True)
# 接收来自 view 的context变量,用 show_list_as_ul.html模板样式去显示
<!--这 show_as_list 的 inclusion_tag 的模板-->
<ul>
{% for l in ls %} <li>{{ l }}</li> {% endfor %} #ls 变量 来自模板标签
</ul>

使用时在html模板文件上方  {% load filters %}

# 接收来自 views 的 定义方式

def show_list_as_ul(value):  # value 接收来自 context的变量
return {'ls': value} # 将 value 转换成一个ls, 变量传递给 模板 register.inclusion_tag(name='show_list_as_ul', filename='show_list_as_ul.html') #我的 html模板放在 app/template下,一开始怎么试都失败...
# 接收来自 view 的context变量,用 show_list_as_ul.html模板样式去显示

后来修改为以下代码:

# 自定义模板标签 和 过滤器

from django.template import Library
from datetime import datetime def to_male(value, arg='zh'):
'''
:param value: 从上下文context中获取值 0为女,1为男
:param arg: 中英文
:return: 性别
'''
dic = {
'zh': ('女', '男'),
'en': ('famle', 'male')
}
return dic[arg][value] register = Library()
register.filter('to_male', to_male) # 自定义简单模板标签
def c_time(format_str='%Y-%m-%d %H:%M:%S'):
now = datetime.now()
return now.strftime(format_str) register.simple_tag(func=c_time, name='c_time') # 自定 简单标签simple_tag 接收 views 中render的 上下文变量 context
# - 把注册器的 takes_context=True,
def c_time2(context): # 第一个参数 必须是 context,名字不能错.
now = datetime.now()
return now.strftime(context['format_str']) # 接收 context['format_str']的值 register.simple_tag(func=c_time2, takes_context=True, name='c_time2') # 自定义 包含标签
# 通过 render 另外一个模板 来展示数据 @register.inclusion_tag('show_list_as_ul.html')
def show_list_as_ul(value): # 接收调用时传递的 模板变量
return {'li': value} #返回 字典 # register.inclusion_tag(filename='show_list_as_ul.html', func=show_list_as_ul, name='show_ul')

  成功!

# 自定义 包含标签
# 通过 render 另外一个模板 来展示数据 @register.inclusion_tag('show_list_as_ul.html')
def show_list_as_ul(value, style): # value 接收调用时传递的 模板变量, stlye 给li 的样式
return {'li': value, 'style': style} #返回 字典, 传递style 给 html模板.
#show_list_as_ul.html

<ul class="list-group">
<!--li为自定义模板标签传递的 值-->
{% if style == 1 %}
{% for l in li %}<li class="list-group-item">{{ l }}</li>{% endfor %}
{% elif style == 2 %}
{% for l in li %}<li class="list-group-item"><span class="badge">{{ l }}</span> </li>{% endfor %}
{% else %}
{% for l in li %}<a href="#" class="list-group-item active">{{ l }}</a>{% endfor %}
{% endif %}
</ul>
#  index.html
<div>
<table class="table">
<tr>
<td>序号</td>
<td>名字</td>
<td>性别</td>
<td>年龄</td>
<td>course</td>
</tr>
{#for 模板 endfor#}
{% for stu in student %}
{# if 模板 endif #}
<tr {% if stu.sex == 0 %}style="color:red" {% endif %}>
{# url模板 传url 和参数#}
<td ><a href="{% url 'student:detail' stu.id %}">{{ stu.id }}</a></td>
<td>{{ stu.name}}</td>
<td>{{ stu.sex|to_male }}</td>
<td>{{ stu.age }}</td>
<td>{% show_list_as_ul stu.course 1 %}</td>
</tr>
{% endfor %}
</table>
</div>

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

  1. Django 自定义过滤器和模板标签

    前提:自定义模板标签和过滤器必须位于Django的某个应用中,这个应用可以包含一个templatetags目录, 和models.py views.py 处于同一级目录.若这个templatetags ...

  2. django自定义过滤器及模板标签

    创建一个模板库 不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 m ...

  3. Django自定义过滤器及标签

    一.自定义过滤器 1.自定义过滤器文件存放位置 在APP应用下创建名为templatetags(该文件夹名固定)的文件包(包含__init__.py文件) 注意APP必须在setting中注册 即在s ...

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

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

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

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

  6. django 自定义过滤器(filter)处理较为复杂的变量的实例

    简述:django 在views中有数据需要通过字典(dict)的方式传递给template,该字典中又包含了字典,而且字典中的键值还是一个对象,在template中处理传递过来的数据的时候,字典不能 ...

  7. Django自定义过滤器中is_safe和need_autoescape两个参数的理解

    自定义template过滤器的方法参考文档,不再赘述 is_safe 文档说明过滤的两种最终形态,其中一种是设置register.filter(is_safe=True),但是对is_safe的具体作 ...

  8. Django 自定义过滤器

    设定自定义过滤器之前要现在配置文件内把自己项目名在 INSTALLED_APPS 内导入 #已安装的django应用 INSTALLED_APPS = [ 'django.contrib.admin' ...

  9. Django和Angular.js模板标签冲突的解决方式

    参考文章:http://yanhua365.lofter.com/post/b417f_1f0361 http://stackoverflow.com/questions/8302928/angula ...

随机推荐

  1. python中的type

    我们常用type()来查看类型,使用方法如下: 1 a = "zzzq" 2 b = 1 3 c = (1, "zzq123") 4 d = [2, " ...

  2. MFC 如何在一个类中使用在其他类中定义的变量或函数

    [声明:本文的知识点来源于网络,参考网址:https://blog.csdn.net/bill_ming/article/details/7407848] [以下三种方法亲测有效,可以根据具体情况来选 ...

  3. 转载:return *this和return this

    文章出处,感谢分享http://blog.csdn.net/stpeace/article/details/22220777 别跟我说, return *this返回当前对象, return this ...

  4. python 生成器 的send

    >>> def f(): c=yield 5 print c d=yield c+5 print d >>> b=f() >>> b.send(N ...

  5. oracle数据库创建并导入dmp文件

    导出:exp userid=xcgwjxuser/xcgwjxuser@orcl file=D:\xcgwjx2014.dmp 导入:imp userid=xcgwjxuser/xcgwjxuser@ ...

  6. redistemplate优雅地操作redis redis 工具类

    参考:https://www.cnblogs.com/superfj/p/9232482.html redis 工具类 package com.service; import org.springfr ...

  7. 报表UI测试点

    1.功能完整性:是否实现了产品需求功能 2.数据准确性:UI显示数据,是否与后端传过来的数据一致 3.页面兼容性:浏览器兼容.布局 4.分页查询 5.数据格式一致性:小数精确位.百分比保留位数等 6. ...

  8. day04-完整性约束

    完整性约束 关键字: not null 与 default unique primary auto_increment foreign key 1.介绍 约束条件与数据类型的宽度一样,都是可选参数作用 ...

  9. html表单中get与post之间的区别

    当用户在 HTML 表单 (HTML Form) 中输入信息并提交之后,有两种方法将信息从浏览器传送到 Web 服务器 (Web Server). 一种方法是通过 URL,另外一种是在 HTTP Re ...

  10. 1.ossutil初步使用

    ossutil对应的阿里云参考文档链接地址: https://help.aliyun.com/document_detail/50452.html?spm=a2c4g.11186623.6.1355. ...