zoukankan      html  css  js  c++  java
  • 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 %}
      
  • 相关阅读:
    学习 JS 内容知识点与个人感悟【2】
    学习两天hml的感悟
    编程一星期感悟(上)
    java基础及练习题
    java基础程序代码及Scanner和Random
    java中Random和Scanner及其循环语句
    java语言及数据类型
    SQL含义+单行函数
    DTL+数据字典+序列、索引、视图
    sql plus及SQL语句
  • 原文地址:https://www.cnblogs.com/jianhaozhou/p/9936768.html
Copyright © 2011-2022 走看看