filter常用内置方法:
length ----->字符串长度
filtersizeformat ------>格式化文件大小 把数值转化为文件类型 xxxMB xxxGB xxxTB
date:'Y-m-d H:i:s' ------->格式化时间
slice ------>切片
safe -------> XSS(跨站脚本攻击)攻击 如果后面使用该方法 说明是安全信任模式 不会对敏感数据字符处理
若是在论坛评论时设置,用JavaScript代码块进行评价,代码块会被执行,很危险 一般都会转义
truncatechars:20 ------>截取字符,超出的用,,,代替
default :xxx ------>值为空时,默认输出xxx
filter默认的方法
Django的模板语言中,属性的优先级要大于方法的优先级
******************************************************************************
fliter(过滤)自定义数据方法的操作:
1、首先需要在APP程序下创建templatetags文件夹(是空的Python包)
2、在文件夹里面创建一个Python文件。按照规定导入相应模块和代码
3、定义想要操作数据的方法
如果是传入一个参数,则默认对字典的值进行操作(管道符号|前的数据)
如果传入的是两个参数,则前面是它,后面是传入的值
4、函数写完后用固定装饰器进行装饰
1 from django import template
2 register=template.Library() #固定模板导入并注册
3
4 @register.filter(name='add')
5 def add_fun(arg1,arg2):
6 return '{}{}'.format(arg1,arg2)
5、在页面调用自定义方法前,先导入方法,并且代码完成后,先重启django框架,要重新加载之前更改的配置
1 {% load myfilter %} #导入自定义filter函数
2 {{ now|add:'****' }} #操作数据
6若是想拼接两个以上的字符串可以用simple_tag
1 from django import template
2 register=template.Library()
3
4 @register.simple_tag(name='ping')
5 def mysub(arg,arg1,arg2):
6 return '{}{}{}'.format(arg,arg1,arg2)
取值可以这样操作:
{% load mysimple %}
{% ping 'abc' '123' 'hhh' %}
HTML页面在for循环操作时,如果值为空,可以在外面给它一个empty 相当于没有值就执行empty代码块里的操作
{% empty %}
1 {% for foo in now %}
2 <tr>
3 <td>{{ now.date }}</td>
4 </tr>
5 {% empty %}
6 <tr>
7 ...
8 </tr>
9 {% endfor %}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HTML母版的继承和使用: 把HTML页面里公用的部分提取出来,放到一个母版里面,其他页面只要继承母版,就可以使用
具体使用步骤:
1,比如有一个母版页面base.html,在里面划分区域块,这部分想用多个不同页面来实现展示,则定义block块
2,在具体实现页面中,先继承母版,然后在block块里面去实现本页面内容
1 {% extends 'base.html' %}
必须放在页面首行
具体的实现操作:比如在母版base页面里面划分区域:
1 <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
2 {# 这里是每个页面不同的部分 就是具体被替换部分 #}
3 {% block page-main %}
4
5 {% endblock %}
6 </div>
在book_list页面里去填充:
1 {% extends 'base.html' %}
2
3 {% block page-main %}
4 <h1 class="page-header">出版社管理页面</h1>
5 <div class="panel panel-primary">
6 <!-- Default panel contents -->
7 <div class="panel-heading">出版社列表 <i class="fa fa-thumb-tack pull-right"></i></div>
8 <div class="panel-body">
9 <div class="row" style="margin-bottom: 15px">
10 <div class="col-md-4">
11 <div class="input-group">
12 <input type="text" class="form-control" placeholder="Search for...">
13 <span class="input-group-btn">
14 <button class="btn btn-default" type="button">搜索</button>
15 </span>
16 </div><!-- /input-group -->
17 </div><!-- /.col-md-4 -->
18 <div class="col-md-3 pull-right">
19 <a href="/add_book/" class="btn btn-success pull-right">添加出版社</a>
20 <button class="btn btn-success pull-right" data-toggle="modal" data-target="#myModal">新增</button>
21 </div>
22
23 </div><!-- /.row -->
24
25 <table class="table table-bordered">
26 <thead>
27 <tr>
28 <th>#</th>
29 <th>id</th>
30 <th>书名</th>
31 <th>出版社名称</th>
32 <th>操作</th>
33 </tr>
34 </thead>
35 <tbody>
36 {% for i in all_book %}
37 <tr>
38 <td>{{ forloop.counter }}</td>
39 <td>{{ i.id }}</td>
40 <td>{{ i.title }}</td>
41 <td>{{ i.publisher.name }}</td>
42 <td>
43 <a class="btn btn-danger" href="/delete_book/?id={{ i.id }}">删除</a>
44 <a class="btn btn-info" href="/edit_book/?id={{ i.id }}">编辑</a>
45 </td>
46 </tr>
47 {% empty %}
48 <tr>
49 <td colspan="5" class="text-center">暂时没有数据哦~</td>
50 </tr>
51 {% endfor %}
52 </tbody>
53 </table>
54
55 <nav aria-label="Page navigation" class="text-right">
56 <ul class="pagination">
57 <li>
58 <a href="#" aria-label="Previous">
59 <span aria-hidden="true">«</span>
60 </a>
61 </li>
62 <li><a href="#">1</a></li>
63 <li><a href="#">2</a></li>
64 <li><a href="#">3</a></li>
65 <li><a href="#">4</a></li>
66 <li><a href="#">5</a></li>
67 <li>
68 <a href="#" aria-label="Next">
69 <span aria-hidden="true">»</span>
70 </a>
71 </li>
72 </ul>
73 </nav>
74 </div>
75
76 </div>
77 {% endblock %}
如果更改了静态文件夹下的默认引用路径名
1 STATIC_URL = '/static123/'
2
3 STATICFILES_DIRS=[
4 os.path.join(BASE_DIR,'static')
5 ]
name静态文件在引用时,需要拼接路径了:
1 {% static 'bootstrap/css/bootstrap.min.css' %}
依旧是static,但是Django模板会自动帮助拼接路径
如果希望返回的是表格形式的HTML样式值 可以使用 inclusion_tag
1 @register.inclusion_tag('result.html')
2 def show_ret(i):
3 i =1 if i < 1 else int(i)
4 data=['第{}项'.format(x) for x in range(1,i+1)]
5 return {'ret':data}
对应的在templates文件夹下创建result页面
1 <ul> 2 {% for foo in ret %} 3 <li>{{ foo }}</li> 4 {% endfor %} 5 6 </ul>
下面是对值进行调用取值:
1 {% load mysimple %}
2 {% show_ret 10 %}