• django模板层


    模板层

    templates文件夹中的html

    模板语法

    两种形式
    1. {{ }} 变量相关
    2. {% %} 逻辑相关

    模板传值

    数据类型
    1. Python基本数据类型全部支持传值

    2. 函数和类

      传递函数名和类的时候,模板语法会自动加()调用,然后将返回值当作展示在前端.

      模板语法不支持传参,that is to say,传给html页面的只能时不需要传参调用的函数(无参函数和带默认值参数的函数)

    <p>传函数名:{{ index1 }}
        给HTML页面传递函数名的时候 模板语法会自动加括号调用该函数 并且将函数的返回值当做展示依据
        模板语法不支持函数传参 也就意味着 你传给html页面的只能是不需要传参调用的函数
    </p>
    	
    <p>传类名:{{ MyClass }}
    	自动加括号实例化产生对象
    </p>
    <p>传对象:{{ obj }}</p>
    <p>{{ obj.get_self }}</p>
    <p>{{ obj.get_cls }}</p>
    <p>{{ obj.get_func }}</p>
    

    总结:只要是能够加括号调用的 传递到html页面上都会自动加括号调用

    模板语法

    过滤器语法结构:|

    模板语法提供了一些帮助快速处理数据的内置方法

    过滤器最多只能有两个参数

    转义

    模板语法默认不转义

    取消默认不转义的方法:

    前端:

    |safe

    后端:

    from django.utils.safestring import mark_safe
    sss2 = "<h2>我的h2标签</h2>"
    res = mark_safe(sss2)
    
    模板语法过滤器
    <p>模板语法之过滤器   会自动将|左边的数据当前过滤器的第一个参数传入 :右边的当做第二个参数</p>
    {#<p>统计长度(如果无法统计默认返回0):{{ s|length }}</p>#}
    {#<p>加法运算(内部异常捕获 支持数字相加 字符串拼接 都不符合返回空):{{ n|add:f }}</p>#}
    {#<p>切片操作 顾头不顾尾 也支持步长:{{ l|slice:'0:5:2' }}</p>#}
    {#<p>判断是否有值(有值展示值本身 没值展示默认值):{{ is_value|default:'is_value变量名指向的值为空' }}</p>#}
    {#<p>自动转成文件大小格式:{{ file_size|filesizeformat }}</p>#}
    {#<p>截取文本内容(字符) 截取五个字符 三个点也算:{{ s|truncatechars:8 }}</p>#}
    {#<p>截取文本内容(按照空格计算) 截取五个单词 三个点不算 :{{ s1|truncatewords:5 }}</p>#}
    {#<p>默认情况下 是不会自动帮你转换成前端html标签 防止恶意攻击</p>#}
    {#<p>展示带有标签的文本:{{ sss|safe }}</p>#}
    {#<p>展示带有标签的文本:{{ sss1|safe }}</p>#}
    
    标签

    逻辑相关

    if 判断

    for循环

    #for if联合使用
    {% for foo in l %}
    {% if forloop.first %}
    <p>这是我的第一次</p>
    {% elif forloop.last %}
    <p>这是最后一次了啊</p>
    {% else %}
    <p>{{ foo }}</p>
    {% endif %}
    {% empty %}
    <p>当for循环的对象是空的时候会走</p>
    {% endfor %}
    
    模板语法的取值

    使用局点符.

    不支持负索引

    <p>模板语法的取值 只有一种方式  统一采用句点符  (.)</p>
    <p>{{ comp_dic.hobby.2.2.age }}</p>
    
    自定义过滤器和标签
    django自定义
    必须要先有三部准备
    1.在应用名下新建一个名字必须叫templatetags的文件夹
    2.在该文件夹内 新建一个任意名称的py文件
    3.在该py文件中 必须先写下面两句代码
    from django.template import Library
    				
    register = Library()
    # 之后就可以利用register来自定义过滤器和标签
    # 自定义过滤器  跟默认的过滤器一样 最多只能接受两个参数
    @register.filter(name='baby')
    def index(a,b):
        return a + b
    
    # 自定义标签   可以接受任意多个参数
    @register.simple_tag(name='mytag')
    def mytag(a,b,c,d):
        return '%s?%s?%s?%s'%(a,b,c,d)
    
    # 自定义inclusion_tag
    """
    是一个函数 能够接受外界传入的参数 然后传递给一个html页面
    页面上获取数据 渲染 完成之后
    将渲染好的页面 放到调用inclusion_tag的地方
    """
    
    # 自定义inclusion_tag
    @register.inclusion_tag('mytag.html',name='xxx')
    def index666(n):
        l = []
        for i in range(n):
            l.append('第%s项'%i)
            return locals()  # 将l直接传递给mytag.html页面
    
    使用自定义标签
    {#<p>自定义过滤器的使用</p>#}
    {#{% load mytag %}#}
    {#{{ 1|baby:1  }}#}
    {#{{ 1|baby:100  }}#}
    
    {#<p>自定义标签的使用 可以接受多个参数 参数与参数之间必须空格隔开</p>#}
    {#{% load mytag %}#}
    {#{% mytag 'a' 'b' 'c' 'd' %}#}
    {#{% load mytag %}#}
    {##}
    {#<p>自定义的过滤器可以在逻辑语句使用 而自定义的标签不可以</p>#}
    {#{% if mytag '1' '2' '3' '4' %}#}
    {#    <p>有值</p>#}
    {#    {% else %}#}
    {#    <p>无值</p>#}
    {#{% endif %}#}
    
    <p>自定义inclusion_tag的使用  当你需要使用一些页面组件的时候 并且该页面组件需要参数才能够正常渲染 你可以考虑使用inclusion_tag</p>
    {% load mytag %}
    {% xxx 5 %}
    

    模板的继承

    在被继承的模板上划分区域,在继承之后,就可以使用划定的区域来控制当前继承页面

    语法

    {% block content %}
    {% endblock %}
    先在页面上利用block划定你以后可能想改的区域
    
    继承之后  就可以通过名字找到对应的区域进行修改
    {% extends 'home.html' %}
    
    {% block content %}
    修改模板中content区域内容
    {% endblock %}
    

    模板上的block区域越多 页面的扩展性越强

    一个前端模板页面至少有三块区域
    #控制css样式
    <head>
        {% block css %}
    
        {% endblock %}
    </head>
    
    #控制js样式
    #写在body内最后
    <body>
    {% block js %}
    
    {% endblock %}
    </body>
    
    #控制html标记
    {% block content %}
    <p>login页面</p>
    {% endblock %}
    
    继承
    #普通继承
    {% extends 'home.html' %}
    #还可以在子页面上继承沿用父页面的内容
    {{ block.super }}
    #后面即可定制自己子页面的内容
    
    模板的继承总结:

    1.先在你想要继承的页面上通过block划定你将来可能要改的区域
    2.在子页面上先继承extends
    3.利用block自动提示 选择你想要修改的内容区域

    模板的导入

    将html页面当作模块直接导入使用

    {% include 'bform.html' %}

  • 相关阅读:
    CentOS7配置本地yum源和在线yum源
    Centos7中安装samba服务器
    phpmydmain登录问题
    java实现简单的加法器
    我的偶像 凯文 米特尼克 简介
    安全好的地方分享
    a标签
    Vmware虚拟机 的工作模式
    java面板
    java的套接字实现远程连接
  • 原文地址:https://www.cnblogs.com/agsol/p/11938117.html
Copyright © 2020-2023  润新知