Django模板元素的使用

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">&laquo;</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">&raquo;</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 %}
原文地址:https://www.cnblogs.com/wen-kang/p/9568062.html