• Django之模板层


    模版层

    两种给模版传参的方式(字典,locals())

    # 第一种
    	return render(request,'index.html',{'n':n})
    	# 第二种
    	return render(request,'index.html',locals())  
    	# 将当前所在的名称空间中的名字全部传递给前端页面
    	
    	后端传函数名到前端,会自动加括号调用,但是不支持传参
    

    前端如何接收( {{}} )

    先传python基本数据类型(数字,字符串,列表,元祖,字典) 前端加{##}模版语言注释,前端是看不到的

    在传函数名(前端自动加括号执行,要不想被执行只想看函数名打印结果可以放到列表中传到前端)

    传类的对象去前端不要传类

    变量前端都能接收到,现在需要介绍如何查找变量里面的值(深度查询)

    # 获取容器对象内数据 统一使用句点符 .
    ('关某某','谢某某','陈某某','容嬷嬷')>>>:{{ t }},{{ t.1 }}  #数字对应的就是数据的索引
    {{dic.name}}  # 获取字典值
    {{div.hobby.0}}  # 如果一次查询还是容器类型则继续可以点方式取值
    
    {{obj.name}}  # jason
    {{obj.get_name}}  # jason
    {{obj.get_cls}}  # cls
    {{obj.get_static}}  # static
    # 如果对象调用的方法需要传参数  模版不支持!!!
    
    # python中字符串,列表等自带的一些方法,到前端依然可以不加括号直接调用,但是不能调带参数的!!!
    

    模版语法之过滤器

    # 先用|length统计字符串或列表的长度,再点进去查看源码,加注释总结,|前面的值会当作第一个参数传递给|后面的函数
    {{ l1|length }}
    
    # 再来一个可以再传一个参数的过滤器,源码看一下
    {{ l2|default:'是空的' }
     
    # 几个常用的过滤器
    filesizeformat  # 将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)
    
    date  # 如果 value=datetime.datetime.now() {{ value|date:"Y-m-d" }} 前端可以展示原生的时间可以经过过滤器处理过后的时间对比查看
    
    slice  # 如果 value="hello world"  {{ value|slice:"0:5:2" }} 支持步长
    
    truncatechars  # 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。  {{ value|truncatechars:9 }}  三个点也算三个数
     
    truncatewords  # 截断字符 三个点不算数
    
    add  # 给数字加一个值,如果第一个参数是字符串,会默认全转成字符串进行拼接
    
    safe  # 取消转义 	{{ value|safe }}
    # 用script脚本阐明转义的意义
    

    模版语法之标签

    # for循环
    {% for foo in l1 %}
    <p>{{ forloop }}</p>
    {% endfor %}
    # {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
    
    # if判断
    {% if user %}
    	hello
    {%else%}
    	world!
    {% endif %}
    
    # if嵌套在for循环里面
    {% for foo in l1%}
    	{% if forloop.first %}
      	第一次的我
      {% elif forloop.last %}
      	最后一次的我
      {% else %}
      	{{ foo }}
      {% endif %}
    {% endfor %}
    
    # empty
    # 当被循环对象是空的时候才会走empty下面的
    
    # for循环字典
    {% for k in dic.keys%}
    {% for k in dic.values%}
    {% for k in dic.items%}
    
    # with起别名(当获取的变量在多层嵌套关系中的时候)
    {% with div.l1.2 as ttt%}
    {{ ttt }}
    {% endwith %}
    # 只要在这个with包裹的区域内都可以使用ttt
    

    自定义标签({%%}中使用)和过滤器(变量相关{{}}中使用)及inclusion_tag返回html片段

    # 自定义过滤器与标签及inclusion_tag步骤:
    # 1.在app中创建templatetags模块(模块名只能是templatetags)
    # 2.创建任意 .py 文件,如:my_tags.py
    # 3.文件中必须先写下面两句
    from django import template
    register = template.Library()   
    
    # 自定义过滤器
    @register.filter(name='baby')
    def my_sum(v1,v2):
      return v1+v2
    # 模版中使用
    {% load my_tags%}
    {{  price|baby:'88' }}
    
    # 自定义标签
    @register.simple_tag(name='plus')
    def puls(a,b,c)
    	return '%s+%s+%s'%(a,b,c)
    # 模版中使用
    {% load my_tags%}
    {% plus 'jason' 66 666%}
    
    # 注意点:自定义的过滤器可以用在if判断,自定义的标签不可以
    {% if 6|baby:4 %}
    <p>肯定是有值的</p>
    {% endif %}
    # 错误示范
    {% if plus 'jason' 6  6 %}
    <p>肯定是有值的</p>
    {% endif %}
    
    # 自定义inclusion_tag返回前端片段
    from django import template
    register = template.Library()
    
    @register.inclusion_tag('result.html')
    def show_results(n):
        n = 1 if n < 1 else int(n)
        data = ["第{}项".format(i) for i in range(1, n+1)]
        return {"data": data}
      
    # result.html
    <ul>
      {% for choice in data %}
        <li>{{ choice }}</li>
      {% endfor %}
    </ul>
    
    # 模版中使用
    {% load inclusion_tag_test %}
    {% show_results 10 %}
    

    模版的继承与导入

    # 模版的继承
    {% extend 'base.html' %}
    # 既想用自己的也想用母版的
    {% block content %}
    {{ block.super }}  # 固定语法可以直接调用到模版的内容
    {% endblock %}
    
    # 模版的导入
    {% include 'left.html '%}
    

    静态文件配置

    # 第一种 直接写死
    
    # 第二种
    {% load static %}  # 先加载
    
    <link rel='stylesheet' href="{% static 'css/mycss.css'%}">  # 第一种方式
    <link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css">  # 第二种方式
    
  • 相关阅读:
    浅谈纯文本&&富文本&&Markdown区别
    浅谈CSS图片base64编码技术
    postman测试请求API:方式post、上传文件file
    Antd版本V3-->V4迁移问题:初始化调整
    浅谈switch语句的技巧
    react路由传参
    react dangerouslySetInnerHTML用法
    SPA单页应用的2种类型分页技术(React、Vue等组件化开发)
    (3)re模块(正则表达式模块)
    (2)hashlib模块(加密算法模块)
  • 原文地址:https://www.cnblogs.com/fuwei8086/p/11006139.html
Copyright © 2020-2023  润新知