• 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 %}
  • 相关阅读:
    抓取csdn上的各类别的文章 (制作csdn app 二)
    Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
    MongoDB基本使用
    MongoDB之DBref(关联插入,查询,删除) 实例深入
    nginx 1.4.7 发送日志到rsyslog
    nginx 编译参数
    nginx 编译参数
    rsyslog 传输日志
    rsyslog 传输日志
    rsyslog 直接读取日志,当日志截断后,不会继续发送
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9568062.html
Copyright © 2020-2023  润新知