django模板层

1.变量

{{ 变量名 }} 这里的变量名是后端中已经定义的变量名

模板层支持的数据类型有字符串、数字、列表、元祖、字典、函数(在引用函数时不需要加括号就可以直接的运行了)、对象

注意:后台一定要穿local()

return render(request, 'index.html', locals())

深度查询用 .

<p>把对象列表中egon年龄取出来:{{ person_list.1.age }}</p>

前端代码:

<h1>模板语言之变量</h1>
<p>字符串:{{ name }}</p>
<p>数字:{{ age }}</p>
<p>列表:{{ ll }}</p>
<p>元祖:{{ tu }}</p>
<p>字典:{{ dic }}</p>
{#只写函数名:相当于函数名(),执行该函数#}
<p>函数:{{ test }}</p>
{#对象内存地址#}
<p>对象:{{ lqz }}</p>
<p>列表套对象:{{ person_list }}</p>
<p>字典套对象:{{ person_dic }}</p>
<hr>
<h1>深度查询</h1>
<p>列表第0个值:{{ ll.0 }}</p>
<p>列表第3个值:{{ ll.3 }}</p>
<p>字典取值:{{ dic.name }}</p>
<p>字典取列表值:{{ dic.ll }}</p>
{#再继续取值,继续点#}
<p>对象取数据属性:{{ lqz.name }}</p>
<p>对象取绑定给对象的函数属性:{{ lqz.get_name }}</p>
<p>对象取绑定给类的函数属性:{{ lqz.cls_test }}</p>
<p>对象取静态方法:{{ lqz.static_test }}</p>
<p>把对象列表中egon年龄取出来:{{ person_list.1.age }}</p>
{#拓展:不能调有参数的方法#}
<p>字符串的方法:{{ name.upper }}</p>

后台代码:

name = 'lqz'
    age = 18
    ll = [1, 2, 'lqz', 'egon']
    ll2=[]
    dic2={}
    tu = (1, 2, 3)
    dic = {'name': 'lqz', 'age': 18, 'll': [1, 2, 4]}

    # 函数
    def test():
        print('lqz')
        return 'zhouxiang dsb'

    # 在模板上相当于执行该函数,并打印
    print(test())

    # 类和对象
    class Person():
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def get_name(self):
            return self.name
        @classmethod
        def cls_test(cls):
            return 'cls'
        @staticmethod
        def static_test():
            return 'static'
        # 模板里不支持带参数
        def get_name_cs(self,ttt):
            return self.name
    lqz=Person('lqz',18)
    egon=Person('egon',18)
    person_list=[lqz,egon]
    person_dic={'lqz':lqz}

    file_size=1024
    import datetime
    ctim=datetime.datetime.now()

    h1='<h1>你好</h1>'
    script='<script>alert(111)</script>'

    # user='lqz'
    user=''

    # return render(request,'index.html',{'name':name})
    # locals() 会把*该*视图函数内的变量,传到模板
    return render(request, 'index.html', locals())

2.过滤器

  • 语法:{{第一个参数|过滤器名字:第二个参数}}
  • 常用的过滤器:length、default、slice、date、filesizeformat、truncatechars、truncatewords、safe、add
<p>统计字符串长度:{{ name|length }}</p>
<p>统计列表长度:{{ ll|length }}</p>
<p>过滤器之默认值:{{ ll2|default:'没有值' }}</p>
<p>
    过滤器之filesizeformat--1:{{ 2013344444444444444444444445555444444444444444444444444444444444444444444444444444444444443|filesizeformat }}</p>
<p>过滤器之filesizeformat--2:{{ file_size|filesizeformat }}</p>
<p>过滤器之不使用date:{{ ctim }}</p>
<p>过滤器之date:{{ ctim|date:'Y-m-d' }}</p>
{#前闭后开区间#}
<p>过滤器之slice:{{ ll|slice:'2:-1' }}</p>
{#支持步长#}
<p>过滤器之slice-字符串:{{ name|slice:'0:3:3' }}</p>
{#三个起步#}
<p>过滤器之truncatechars:{{ 'dafddfafgadfgaasdgadgfadaf'|truncatechars:5 }}</p>
<p>过滤器之truncatewords:{{ '我 dfaf ga dfgaas 你 dgf adaf'|truncatewords:5 }}</p>
<p>过滤器之不用safe:{{ h1 }}</p>
<p>过滤器之用safe:{{ h1|safe }}</p>

<p>过滤器之不用safe:{{ script }}</p>
{#<p>过滤器之用safe:{{ script|safe }}</p>#}
<p>过滤器之用add:{{ 12|add:'1' }}</p>
<p>过滤器之用add:{{ 'egon'|add:'dsb' }}</p>

3.标签

  • 1.语法:{% %}

  • 2.for标签 forloop:对象(里面有好多东西:parentloop,last,first,counter....)忘记的话, 自己打印一下 empty:被循环的对象是空,才走它

    遍历一个列表

    {% for person in person_list %}
        <p>{{ person.name }}</p>
    {% endfor %}
    

    遍历一个字典:

    {% for key,val in dic.items %}
        <p>{{ key }}:{{ val }}</p>
    {% endfor %
    
  • for+empty+parentloop

{% for foo in nl %}
    {% if forloop.first %}
        第一

    {% elif forloop.last %}
        最后
    {% else %}
        {{ foo }}
    {% endif %}
    {% empty %}
    为空啊
{% endfor %}
  • 3.if标签
{% if forloop.first %}
	<p>第一次的我 </p>
{% elif forloop.last %}
	<p>最后的我 </p>
{% else %}
	<p>{{ foo }}</p>吧
{% endif %}
  • 4.with 重命名,应用在变量名过长
{% with dic.ll.2 as ttt %}
    {{ ttt }}

    {{ ttt }}

{% endwith %}

4.自定义标签

  • 标签不能用在if判断,过滤器,可以用在if判断
  • 1.先app是不是已经在setting中注册
  • 2.在app下创建一个templatetags(名字不能变)的文件夹(模块)
  • 3.在模块下创建一个py文件,名字随意:mytag.py
  • 4.mytag.py中的内容:
from django.template import Library

register = Library()

@register.filter(name='myadd')
def sadd(str1):
    return str1 + 1
  • 5.在模板中使用
{% load mytag %}
{{'lqz'|myadd}}或{{'lqz'|sadd}}

5.自定义过滤器

  • 1-3.前三步与自定义标签相同

  • 4.mytag.py中的内容:

    from django.template import Library
    
    register = Library()
    
    @register.simple_tag()
    def addtest():
        return '测试!'
    
  • 5.使用

    {% load mytag %}
    {% addtest %}
    
原文地址:https://www.cnblogs.com/jianhaozhou/p/9936768.html