• django第三课 模板变量及过滤器


    1.模板路径的查找

    - 查找顺序,
            - 会首先查找TEMPLATES里面的DIRS
    
      TEMPLATES = [
       {
           'BACKEND': 'django.template.backends.django.DjangoTemplates',
           'DIRS': [os.path.join(BASE_DIR,'templets')],
           'APP_DIRS': True,
           'OPTIONS': {
               'context_processors': [
                   'django.template.context_processors.debug',
                   'django.template.context_processors.request',
                   'django.contrib.auth.context_processors.auth',
                   'django.contrib.messages.context_processors.messages',
               ],
           },
       },
    ]
    
            - 然后如果APP_DIRS为TRUE时,会去查找 INSTALLED_APPS, 这两种方案,以为第一种方案为准。
    
    INSTALLED_APPS = [
        ‘
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    	尝试,在app目录下存放模板
    - 两种方案
    
    - 为什么要在tempaltes里面再套一层
    ** 只要找到一个符合的模板,就返回
    

    2.模板变量

        - 静态页面,内容不会发送变化
        - 动态页面 内容是动态的,与服务器进行交互。会随时间变化而变化。
    
    动态页面可以通过render 方法渲染
    
    - 模板变量
    	- 语法
    	*** 不能以下划线开头
            
    	
    **变量的值可以是任何数据类型
    -变量的解析规则
    	各种尝试
    	1.计算变量,将其替换为结果
    
    
    	2.遇到点(.)的时候,按一下顺序查找:
    		-1.字典键值查找
     views.py文件代码:
    
    from django.shortcuts import render,redirect,reverse
    from django.template.loader import get_template
    from datetime import datetime
    # Create your views here.
    from django.http import  HttpResponse
    
    def index(request):
        now =datetime.now()
        # tp = get_template('index.html')
        # html = tp.render()
        return render(request,'index.html',context={
            'now':now
        })
    

    静态文件调用

    <body>
    <h1>我是crm下面的模板文件首页</h1>
    <h2>当前时间{{ now }}}</h2>
    </body>
    </html>
    

    效果显示:

    		-2.属性或方法查找
    		-3.数字索引查找
    3.如果结果是可调用的,则调用它时不带参数。调用的结果成为模板的值
    	## 所谓的结果是可调用的,说明变量是个函数,或是个方法
    	
    	** 渲染失败返回''
    

    views.py 文件代码:

    from django.shortcuts import render,redirect,reverse
    from django.template.loader import get_template
    from datetime import datetime
    # Create your views here.
    from django.http import  HttpResponse
    
    def index(request):
        now =datetime.now()
        lt = [1,2,3]
        def func():
            return 'aa'
        # tp = get_template('index.html')
        # html = tp.render()
        dt = {'name':'donghao','age':1000}
        return render(request,'index.html',context={
            'now':now,
            'lt':lt,
            'func':func,
            'dt':dt,
        })
    

    index.html文件代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>我是crm下面的模板文件首页</h1>
    <h2>当前时间{{ now }}}</h2>
    <p>我是一个列表{{ lt }}</p>
    <p>我是列表的第二个值{{lt.1}}</p>
    <p>我是一个函数{{func}}</p>
    <p>我是一个字典{{dt}}</p>
    <p>我是字典里面的一个值{{dt.name}}</p>
    </body>
    </html>
    

    效果显示

    3.模板过滤器 filter

    -常用模板过滤器
    	add 将参数与值相加 首先尝试转换成整数相加,失败,则尝试所有可能,字符串,列表等。{{ value|add:"2" }}
    	capfirst 首字母大写,如果第一个字母不是字母则不起作用。{{ value|capfirst }}
    	date 日期格式化 {{ value|date:"D d M Y" }}
    	time 时间格式化 {{ value|time:"H:i" }} 格式化格式见官方文档:https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#date
    	default 如果变量解析失败,使用给定的默认值。{{ value|default:"nothing" }}(注意如果value是''空字符串,输出将会是'nothing')
    	first 返回列表的第一个元素 {{ value|first }}
    	last 返回列表的最有一个元素 {{ value|last }}
    	slice 返回一个列表的切片 {{ some_list|slice:":2" }}
    	join 连接字符串列表 与str.join(list)一样 {{ value|join:" // " }}
    	floatformat 浮点数格式化 不指定小数位参数,默认保留一个为小数
    	value	     Template	            Output
    	34.23234	{{ value|floatformat }} 34.2
    	34.23234	{{ value|floatformat:3 }} 34.232
    	length 返回字符串或列表的长度
    	length_is 判断字符串或列表长度是否指定的值,相等返回True {{ value|length_is:"4" }}
    	lower 字符串中的字母都变小写{{ value|lower }}
    	upper 字符串中的字母都变大写{{ value|upper }}
    	safe 关闭变量的自动转义,使html标签生效{{ value|safe }}
    	title 标题化,首字母大写 {{ value|title }}
    -xss(跨域脚本攻击)
    

    views.py文件:

    from django.shortcuts import render,redirect,reverse
    from django.template.loader import get_template
    from datetime import datetime
    # Create your views here.
    from django.http import  HttpResponse
    
    def index(request):
        now =datetime.now()
        lt = [1.44555,2.2,3.22,'i am  donghao']
        def func():
            return 'aa'
        # tp = get_template('index.html')
        # html = tp.render()
        dt = {'name':'donghao','age':1000}
        js = "<h1>我是安全的</h1>"
        return render(request,'index.html',context={
            'now':now,
            'lt':lt,
            'func':func,
            'dt':dt,
            'js':js
        })
    def login(request):
        url = reverse('teacher:index')
        return redirect(url)
    def detail(request,pk,slug):
            return  HttpResponse('学生id为%s的详情页'%pk)
    
    def students(request,year,month):
        return HttpResponse('%s年%s月报名的学生列表'%(year,month))
    

    index.html文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>我是crm下面的模板文件首页</h1>
    <h2>当前日期{{ now |date:"M-Y" }}</h2>
    <h2>当前时间{{ now |time:"H时-i分-s秒" }}</h2>
    <p>我是一个列表{{ lt }}</p>
    <hr>
    <p>我是列表的第一个值{{ lt| first }}</p>
    <p>我是列表的最后一个值{{lt|last}}</p>
    <p>我是列表的最后一个值{{lt|last | title}}</p>
    <p>我是列表的倒叙{{lt|slice:'::-1'}}</p>
    <p>我是列表的拼接{{lt|join:'//'}}</p>
    <p>我是列表的浮点数格式化{{lt.1|floatformat}}</p>
    <p>我是列表的浮点数格式化{{lt.1|floatformat:3}}</p>
    <p>我是列表的第二个值{{lt.1|add:3}}</p>
    <p>我是列表的长度{{lt|length}}</p>
    <p>我是列表的长度{{lt|length_is:3}}</p>
    <p>我是一个函数{{func | default:'nothing'|add:'haha' | capfirst}}</p>
    <p>我是一个函数小写{{func | default:'nothing'|add:'haha' | lower}}</p>
    <p>我是一个函数大写{{func | default:'nothing'|add:'haha' | upper}}</p>
    <p>我是一个字典{{dt}}</p>
    <p>我是字典里面的一个值{{dt.name}}</p>
    <p>{{js|safe}}</p>
    </body>
    </html>
    

    效果显示:

    4静态文件引用:

      1. 路径配置
      • STATICFILES_DIRS
      • STATIC_URL
        setting文件设置
    STATIC_URL = '/static/'
    STARICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
    
      1. 静态文件的引入
        -1. 硬编码 通过 STATIC_URL
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/css/index.css">
    </head>
    

    index.css

    p {
        color: red;
    }
    

    效果显示:

    -2. 模板标签
    需要现在index.html顶部加入标签,
    
    {% load static %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!--<link rel="stylesheet" href="/static/css/index.css">-->
        <link rel="stylesheet" href="{% static 'css/index.css'%}">
    </head>
    

    效果显示:

    {% load static %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!--<link rel="stylesheet" href="/static/css/index.css">-->
        <link rel="stylesheet" href="{% static 'css/index.css'%}">
    </head>
    
  • 相关阅读:
    springmvc上传下载
    在线剪切
    Spring入门
    登录验证后端添加过滤器
    SpringMVC入门
    ScriptManager 以及ScriptManagerProxy在母版中使用和Service属性的使用
    GridView中如何使用CommandField删除时,弹出确认框?
    C# 测量用指定的 Font 绘制的指定字符串。(指定字符串的像素长度)
    ASP.NET AJAX 简单地过一下每个控件(ScriptManager、ScriptManagerProxy、UpdatePanel、 UpdateProgress和Timer)
    XML结构和数据导入到SQL server
  • 原文地址:https://www.cnblogs.com/donghao1121/p/10398365.html
Copyright © 2020-2023  润新知