Python大神 - Django(深层学习)-- 模板语言

寄语:

模板语言:模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

模板(template)中也有自己的语言,该语言可以实现数据展示

一、继承(include,extend)

a.完全一致   

  {% include xxx.html %}

b.继承模板,设计自己特立的部分({% block block_name %}{% endblock %})

  母版:{% block title %}{% endblock %}

  子版:{% extend xxx.html%}
        {% block block_name %}{% endblock %}

二、数据获取

  获取单个:{{ item }}

  循环:{% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
     forloop.counter  # 计算器,从1开始,forloop.counter

     forloop.first # 第一次循环      forloop.last   # 最后一次循环

三、判断

        {% if ordered_warranty %}  {% else %} {% endif %}
        {% if not ordered_warranty %} {% else %} {% endif %}
        
        {% if sort == 'courses' or sort == 'org' or sort == 'teacher' % } {% else %} {% endif %}
        {% if sort == 'courses' and sort == 'org' % } {% else %} {% endif %}
        注:or与and不可放进同一逻辑里
        
        {% if sort == 'courses' % } {% else %} {% endif %}
        {% ifequal sort 'courses' %}active{% endifequal %} 

四、模板语言里提供的方法

 1   2)stringformat(数据类型的转换) 4       # 数据类型的转换
 5       {% ifequal city.id|stringformat:'i' city_id %}active2{% endifequal %} 
 6             
 7     3)分割(路径分割)--slice
 8         {% if request.path|slice:'7'  == '/course' %}{% endif %}
 9         
10     4)显示有choice字段的命名(get_degree_display)
11         {{ request.user.get_degree_display }}
12         
13     5)divisibleby标签的意义是用后面的参数去除,除尽为True,否则为False。
14         {% if forloop.counter|divisibleby:2 %}
15         
16     6)代码表示:5/1 *100,返回500,widthratio需要三个参数,它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2=1即可 Django模版除法
17         {%  widthratio 5 1 100 %}
18         
19     7)定制日期显示模式
20         {{ item.event_start|date:"Y-m-d H:i:s"}}
21         
22     823         {{ bio|truncatewords:"30" }}
24         
25     9)首字母大写
26         {{ my_list|first|upper }} 
27         
28     10)变小写
29         {{ name|lower }}

    11)放置CSRF攻击
      {% csrf_token %} # form表单使用
      xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}"); # 用POST提交必须请求头带csrf_token # post 方法下使用

五、自定义simple_tag

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.py
    #!/usr/bin/env python
    #coding:utf-8
    from django import template
    from django.utils.safestring import mark_safe
       
    register = template.Library()
       
    @register.simple_tag
    def my_simple_time(v1,v2,v3):
        return  v1 + v2 + v3
       
    @register.simple_tag
    def my_input(id,arg):
        result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
        return mark_safe(result)
    
c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名
    {% load xx %}

d、使用simple_tag
    {% my_simple_time 1 2 3%}
    {% my_input 'id_username' 'hide'%}

e、在settings中配置当前app,不然django无法找到自定义的simple_tag  
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01',
    )
自定义方法--步骤

 

posted @ 2017-10-19 17:51  浪子斌  阅读(382)  评论(0编辑  收藏  举报