templates 模板层

1.模板简介

DTL:django模板语言

核心:

变量{{}}

标签{% %}

render 渲染页面,可以通过locals()将函数的私有属性

views文件下内容

 

def index(request):
    age = 18
    name = "lqz"
    dic = {'name':'msj',"age":25,'hobbies':['paly','game']}
    li1 = [18,'lqz','ppp',123]

    class Person:
        def __init__(self,name):
            self.name = name
        def test(self):
            print('test')
            return 'test'
        @classmethod
        def test_classmethod(cls):
            print('类方法')
            return '类方法'

        @staticmethod
        def staticmethod_test():
            print("静态方法")
            return '静态方法'

        def __str__(self):
            return 'Person'

    lqz= Person('lqz')
    egon = Person('egon')
    person_list = [lqz,egon]

    def aaa():
        return 'aaaaaaa'

    bol1 = False
    bol2 = []
    bol3 = [1,]

    file_size = 10240

    ctime = datetime.datetime.now()

    new_name= 'abcdefghijk'

    new_words = "you will have a good day"

    a = '<a href="http://www.baidu..com">点击连接</a>'


    return render(request,'index.html',locals())
#locals(),将所有的index属性的作为参数传给模板变量
View Code

2.模板语法之变量

变量渲染:{{}}

变量深度查询:{{变量。索引/key/方法}}

<h2>基本的变量解析使用的两个{}的用法+变量名</h2>
<p>{{ age }}</p>
<p>{{ name }}</p>
<p>{{ dic }}</p>
<p>{{ li1 }}</p>
<h2>变量深度查询:变量.索引/key值/方法</h2>
<p>{{ dic.name }}</p>
<p>{{ dic.hobbies }}</p>
<p>{{ li1.0 }}</p>
<p>{{ li1.1 }}</p>
<p>{{ dic.hobbies.1 }}</p>
<h3>方法的调用,对象方法</h3>
<p>{{ person_list.1.test }}</p>
<h3>在views,使用直接向变量使用就可调用</h3>
<p>{{ aaa }}</p>

3模板之过滤器

变量之过滤器(是个函数)

{{age| add:参数}}

add

<p>age| add:2 {{ age| add:2 }}</p>

length

<p>name|length {{ name|length }}</p>

default

<h3>default 简单的判断,当前一个变量为空或False的时候,那么返回default 后面的内容,否则返回原来的内容</h3>
<p>{{ bol1|default:'假的' }}</p>
<p>{{ bol2|default:'空的' }}</p>
<p>{{ bol3|default:'存在' }}</p>

filesizeformat

<h3>filesizeformat 将数字装换数据大小</h3>
<p>file_size|filesizeformat {{ file_size|filesizeformat }}</p>

date

<h3>date:"加上格式"来创建内容</h3>
<p>{{ ctime }}</p>
<p>{{ ctime|date:'Y-m-d' }}</p>

slice

<h3>slice:"开始索引,结束索引" 切片</h3>
<p>new_name|slice:'2:-1' {{ new_name|slice:'2:-1' }}</p>

truncatechars

truncatewords

<h3>truncatechars 省略字符 ...也算做字符长度</h3>
<p>new_name|truncatechars:6{{ new_name|truncatechars:6 }}</p>
<h3>truncatewords 省略单词 ...不算做单词长度</h3>
<p>new_words|truncatewords:3{{ new_words|truncatewords:3 }}</p>

safe

<h3>有后台的连接的字符串的能够</h3>
<a href="http://www.baidu..com">点击连接</a>
<p>正常,不用safe {{ a }}</p>
<p>a|safe {{ a|safe }}</p>

4.模板之标签

-语法:{% %} -foo是一个可迭代对象

for标签循环

<h2>模板标签主要作用:流程控制或一定程度的处理,可以接受多个参数</h2>
<h3>for模板标签的基本使用 for li in li1</h3>
{% for li in li1 %}
    <p>{{ li}}</p>
{% endfor %}
<h3>反向循环 for li in li1 reversed </h3>
{% for li in li1 reversed %}
    <p>{{ li}}</p>
{% endfor %}

forloop用查看循环内容的信息

<h3>forloop只能在for循环中使用,可以获得一系列的数据,包括上级循环的信息,本次循环的位置,是否是开头,是否是结尾等</h3>
{% for li in li1 %}
    {{ forloop }}
    <p>{{ li}}</p>
{% endfor %}
<h3>结果如下:{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False}</h3>
<p>parentloop:父级信息</p>
<p>counter0:从0计数索引</p>
<p>counter:从1计数索引</p>
<p>revcounter:反向从1计数索引</p>
<p>revcounter0:反向从0计数索引</p>
<p>first:是第一位?</p>
<p>last:是最后一位吗?</p>

empty标签在空循环的情况下执行

<h3>empty标签:空循环则执行下面的内容,也必须在for循环总才可生效</h3>

{% for foo in bol2 %}
    {{ foo }}
    {% empty %}
    <p>你的循环为空循环</p>

{% endfor %}

if elif else分支结构

<h3>if else elif 标签的使用</h3>
{% if age < 10 %}
    <p>年龄小于10岁</p>
    {% elif age < 20 %}
    <p>年龄在10-20</p>
    {% else %}
    <p>年龄>20</p>


{% endif %}

对于较长的变量可以使用with标签

<h3>with标签 起别名</h3>
{% with person_list.1 as a %}
    {{ a }}

{% endwith %}

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

1、确认在settings文件的设置,

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
]

2、在app01文件夹下创建python directory 包(固定名称 templatetags)

3.在包下创建py文件,用于自定义过滤器和标签

4.导入

from django.template import Library
register = Library()#固定格式

过滤器

@register.filter(name ="myadd")
def my_add(a,b):
    return a+b

标签

@register.simple_tag(name='addd')
def tag_add(a,b,c):
    return a+b+c

5.模板中使用

{% load my_tags %}
<!--导入过滤器和标签-->
{{ age|myadd:5 }}
<!--正常过滤器的使用-->

<p>{% addd 1 2 3 %}</p>
<!--正常标签的使用-->

7 标签和过滤器的区别: 1 标签可以传多个参数,过滤器最多只能传2个 2 使用过滤器{{ }} 标签使用:{% %} 3 重点:过滤器可以放在if判断后,标签不能放在if判断后

 

posted @ 2019-01-10 20:44  msjaxuexi  阅读(225)  评论(0编辑  收藏  举报