templates 模板层

Posted msj513

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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判断后

 

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

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

VSCode自定义代码片段1——vue主模板

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段(vue主模板)

Eclipse 中的通用代码片段或模板

Django—— 模板层:变量过滤器标签自定义标签和过滤器