djano-模板层基础知识

Posted zhuchunyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了djano-模板层基础知识相关的知识,希望对你有一定的参考价值。

########模板层########
模板层其实就是templates文件夹里的html文件
其实这里的每个html不是真正意义的上html代码,只有经过模板渲染过后才算的上真正的html页面。

一、模板语言(变量,深度查询,过滤器,标签)

1、变量
    在django模板里通过{{ name }} 表示一个变量,name就是一个变量名
    首先我们要明白这个变量是怎么传出来的,
    在视图层:
        return render(request,index.html,local())
        #local()就把当前视图函数的变量全部传到index.html模板中,这样就不要我们写太多代码了,但是
        #也有缺点,就是把一些不需要渲染的变量也传了过去。
    模板层:
        当程序读到{{开头,一直读到}}结尾,这里会有一个变量值,就会去名称空间里找相应的变量。这其实
        和我们之前写socket写服务端一样的,读取文件,再用相应的变量去替换掉符合条件的字符串。
    好了好了,说说变量吧,记住一点就行:{{name}}  ----> 相当于在python中执行了print(name)操作
    你记住这个就行了!!!,这就是精髓。下面我就写写伪代码吧,
    name = zhuyu  #视图层定义的变量
    {{ name }}      #在前台页面显示 zhuyu     后面我就不写注释了

    list = [1,2,3,[hello,word]]
    {{ list }}  --------->  [1,2,3,[hello,word]]

    def run():
        return run go
    {{ run }}  --------->   run go  #这里我说下,在python中我们打印print(run),显示的函数的内存地址,
                                      #会出现‘run go‘,只能说明模板中执行函数,打印了它的返回值。

    zhuyu = User(zhuyu,19)   #这里是User是一个类
    {{ zhuyu }} -------->   <app01.views.index.<locals>.People object at 0x0000028D4DDDB240> 
                            #你在python中,打印一个对象,执行__str__,他的返回值就上面这个,所以说,看下面

    {{zhuyu.get_name}}   ----->  zhuyu 
                                 #这是调用对象的方法,也是执行方法,打印的是它的返回值

    总结:1、{{ 变量名 }}  其实就是执行print操作
         2、假如该变量是一个函数,或者对象的函数属性,就是帮你执行,打印执行后的返回值
         3、不能打印带参数的函数,方法,这里要小心!!!!

2、过滤器
    {{ name|length }}    这是一个参数的过滤器
    {{ zhu|add:yu }}   这是两个参数的过滤器

    总结:|前是第一个参数,后面就是过滤器,冒号(:)就是第二个参数,
         记住只能传两个参数,如果你想传多个参数的话,你可以为第二个参数写上指定的格式比如(a:b:c),然后拿到该参数,也是就一个字符串,进行split(:)操作,这样你就拿到一个列表了,相当于你第二个参数传了三个参数,对不对。其实方法有很多的,看你自己怎么写了。

3、标签
    {% %} ------>  表示一个标签,他是和变量、过滤器是有差距的,看也看得出来。
    for循环:
        {%for foo in foos%}
        {% endfor %}

    if判断:
        {% if %}
        {% endif %}

    with(相当于给一个复杂的变量名赋别名):
        {% with asdasdasdsa as as%}
        {% endwith %}

    总结:1、这些不都不用多说了,学过python,这些再清楚不过了,记住它的语法规定就行了,for循环,if判断,with都和python差不多。对了,for循环里有一个对
       象,forlorp,是不在记不住你就在循环里打印看看是什么就好了
         2、哦哦,还有不是if判断,它判断的条件可以是过滤器,过滤器就是判断它的返回值嘛,但不可以是标签,没有为什么。

4、自定义过滤器,标签
    (1)、首先在app文件中新建一个文件夹(包),名字必须为templatetags
    (2)、在该文件夹中新建py文件,名字随便你取:例如tags.py
    (3)、在py文件中导入模块,并且实例化一个对象,名字必须为register
        from django.template import library
        register = library()
    (4)、继续在该文件中写的函数,过滤器,标签其本质也是一个函数,但是你写的函数必须要有装饰器,这样才能成为过滤器,标签。
        @register.filler(name=add) #这样写这个函数才是一个过滤器,对就是过滤器,name=‘add‘,给过滤器命名
        def my_add(value1,value2):
            return value1+value2

        @register.tag(add1)  #这样写该函数才是标签,就是在上面加装饰器
        def add_str(value1,value2,value3):
            return value1+value2+value3

    (5)、上面的步骤,我们只是注册了过滤器,标签,想要使用的话,必须要在模板中导入
        {% load tags %}   #这里的tags就是你新建的py文件
        {{ zhuyu|add:nb }}   #这里add就是我之前自定义的过滤器,不要在add  名字和已有的模板标签重名说到重名,我现在有个想法,它到底是执行django自带的过滤器,还是我定义的呢?这肯定是由先后的,自己去试试。
        {% add1 zhuyu nb !%} #这里这个add1标签必须传多个参数,用空格去区别。

5、对了差点忘了深度查询
    对于列表,字典在python中我们是怎么去取值的呢?
        name = [zhuyu,zhanghao,daisongbai,wuyang,yangpeng]
        info_dic = {name:‘‘zhuyu,age:21}

        取列表的第二个元素: name[1]
        取字典key为name:   info_dic[name]
        
    但是在模板中,是没有[]的,那么我们该怎么去取呢?
    我们同一使用.,千万别看漏了小数点,我们用.去取值
        取列表的第三个元素:  name.3      #这是在模板中记住
        取字典的key为age:   info_dic.age

    深度查询其实很简单,你可以一直.下去。
    

今天就更新结束,哈哈,我只是通过讲话的方式,来记录一些知识点。

 

以上是关于djano-模板层基础知识的主要内容,如果未能解决你的问题,请参考以下文章

Djano 自定义分页效果

小程序基础13:模板

模板不存在“django 2.0”

十个html5代码片段,超实用,一定要收藏

微信小程序开发--模板(template)使用,数据加载,点击交互

[vscode]--HTML代码片段(基础版,reactvuejquery)