• DJango 基础 (3)


    模板路径

    在配置文件setting.py中找到TEMPLATES设置来配置。

    这是一个设置选项的列表,模板大都包含两项通用设置;两种方式配置模板:

    第一种: DIRS 定义一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件。将templates放在主项目目录下.

    第二种: APP_DIRS告诉模板引擎是否应该进入每个已安装的应用中查找模板,值为True则模板会去安装了的app下面的templates文件夹查找模板。。所以我们也可以在每个app的里面创建模板目录templates存放模板,这种方式需要将这个app添加到setting.py文件的INSTALLED_APPS列表中.

    模板变量

    1、语法:{{变量名}}

    2、命名由字母和数字以及下划线组成,不能有空格和标点符号。

    3、可以使用字典、模型、方法、函数、列表。

    4、不要和python或django关键字重名。

    原因:如果data是一个字典,那么访问data.items将会访问data这个字典的key名为items的值,而不会访问字典的items方法。

    5.变量和查找

    点在模板渲染时有特殊的含义。 变量名中点表示查找。 具体一点,当模板系统遇到变量名中的一个点时,它会按下面的顺序进行查找:字典查找,属性查找,列表索引查找。

    模板变量的例子:
    {# /templates/books/index.html #}
    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>首页</title>
    </head>
    <body>
      这个变量是字符串对象:{{ books_name}}<br>
      这个变量是函数对象:{{ hello}}<br>
      这个变量是类方法对象:{{ fruits_say}}<br>
      这个变量是类对象:{{ fruits}}<br>
      这个变量是类对象,访问类对象的属性:{{ fruits.name}}<br>
      这个变量是类对象,访问类对象的方法:{{ fruits.say}}<br>
      这个变量是列表对象{{ list }}<br>
      这个变量是列表对象,访问列表的元素{{ list.1 }}<br>
      这个变量是字典对象{{ dict }}<br>
      这个变量是字典对象,访问字典的键{{ dict.a }}<br>
    </body>
    </html>
    # books/views.py
    def hello():
       return 'django'

    class Fruits:
       def __init__(self, name, color):
           self.name = name
           self.color = color
       def say(self):
           return 'HAHAHAHA'  
       
    ap = Fruits('apple','red')
    ls = ['x','y','z']
    dc = {'a':1,'b':2}
    from django.shortcuts import render
    def index_5(request,bn):
       return render(request,'books/index.html',
                     context={'books_name':'python',#字符串
                              'hello':hello,        # 函数
                              'fruits_say':ap.say,  # 方法
                              'fruits':ap,          # 类对象
                              'list':ls,            # 列表
                              'dict':dc,            # 字典
                              })

    Django模板过滤器

    知识点:

    1. 基本概念

    2. 常用的过滤器

    3. 过滤器例子

    4. 关于自动转义

    模板过滤器

    作用:对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。

    语法:{{fruits|lower}}

    管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。

    语法:{{fruits|lower|capfirst}}

    使用参数:过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器,

    语法如下: {{fruits|cut:" "}}注意:使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着。

    过滤器参数,可以使用变量.字符串相加,数字相加,列表相加,如果失败,将会返回一个空字符串。

    Django常用的过滤器


    1add :字符串相加,数字相加,列表相加,如果失败,将会返回一个空字符串。
    2、default:提供一个默认值,在这个值被django认为是False的时候使用。比如:空字符串、None。区别于default_if_none,这个只有在变量为None的时候才使用默认值。
    3、first:返回列表中的第一个值。
    4、last:返回列表中的最后一个值。
    5、date:格式化日期和时间。
    6、time:格式化时间。
    7、join:跟python中的join一样的用法。
    8、length:返回字符串或者是数组的长度。
    9、length_is:字符串或者是数组的长度是否是指定的值。
    10、lower:把所有字符串都编程小写。
    11、truncatechars:根据后面给的参数,截断字符,如果超过了用…表示。
    12、truncatewords:同truncatechars,这个是以一个单词为单位进行截断。
    以上两个有xxx_html类型的,针对html,截断标签中的字符,而不会截断标签。
    13、capfirst:首字母大写。
    14、slice:切割列表。用法跟python中的切片操作是一样的,区间是前闭合后开放。
    15、striptags:去掉所有的html标签。
    16、safe:关闭变量的自动转义
    17、floatformat:浮点数格式化。
    date和time过滤器格式

    Y:四位数的年。如:1999
    y:两位数的年。如:99
    m:两位数的月。如:01,09
    n:一位数的月。如:1,9,12
    d:两位数的日。如:01,09,31
    j:一位数的日。如:1,9,31
    g:12小时制的一位数的小时。如:1,9,12
    G:24小时制的一位数小时。如:0,8,23
    h:12小时制的两位数的小时。如:01,09,12
    H:24小时制的两位数的小时。如:01,13,24
    i:分钟。从00-59
    s:秒。从00-59
    过滤器例子:

    新建一个名为movie的APP.

    {# /templates/movie/index22.html #}
    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>home</title>
    </head>
    <body>
      这是没做处理的变量:{{ test }}<br>
      这是设置了默认值的变量:{{ xx|default:'xxxxxx' }}<br>
      这是设置了只有为None时才使用默认值的变量:{{ xx|default_if_none:'xxxxxx' }}<br>
      这是变为小写后的变量:{{ test|lower }}<br>
      这是先变成小写再将首字母大写后的变量:{{ test|lower|capfirst}}<br>
      这是两个数字变量相加:{{ num1|add:num2 }}<br>
      这是两个字符串变量相加:{{ test|add:xx }}<br>
      这是列表变量的第一个元素:{{ list|first }}<br>
      这是列表变量的最后一个元素:{{ list|last }}<br>
      这是默认的data日期时间格式:{{ now|date }}<br>
      这是默认的time时间格式:{{ now|time }}<br>
      这是data过滤器的年月日24小时制时间格式:{{ now|date:'Y/m/d/H:i:s ' }}<br>
      这是time过滤器的年月日12小时制时间格式:{{ now|time:'h:i:s ' }}<br>
      这是字符串的join方法:{{ ls|join:'xxx' }}<br>
      这是字符串的长度方法:{{ test|length }}<br>
      这是列表的长度是否长度为4:{{ list|length_is:4 }}<br>
      这是字符串只显示4个字符,其余省略(占3位):{{ test|truncatechars:7 }}<br>
      这是字符串只显示2个单词,其余省略(不占位):{{ test|truncatewords:2 }}<br>
      这是字符串切片:{{ test|slice:'1:4' }}<br>
      这是列表切片:{{ list|slice:':2' }}<br>
      这是含html标签的字符串:{{ html }}<br>
      这是去掉字符串中的html标签:{{ html|striptags }}<br>
      这是关掉自动转义,使字符串中html标签生效:{{ html|safe }}<br>
      这是没做处理的小数:{{ float }}<br>
      这是保留了一位小数:{{ float|floatformat }}<br>
      这是保留了两位位小数:{{ float|floatformat:'2' }}<br>  
    </body>
    </html>

    # movie/views.py
    from django.shortcuts import render
    from datetime import datetime

    ls = ['x','y','z']
    def hello(request):
       test = 'THIS IS A LIST!'
       return render(request,'movie/home.html',
                     context={'test':test,
                              'xx':'',
                              'num1':1,
                              'num2':2,
                              'list':ls,
                              'now':datetime.now,
                              'html':'<h1>hello django!!!</h1>',
                              'float':3.1415926,
                              })
    关于自动转义

    什么是自动转义?
    自动转义是将变量的一些特殊字符,比如左箭头(<)、右箭头(>)转义成html代码,这样做的目的是为了处理一些不安全的变量。
    <:转义成&lt;
    >:转义成&gt;
    ‘:转义成&#39;
    “:转义成&quot;
    &:转义成&amp;

    练习:

    模板变量和过滤器的例子:
    路由文件:urls.py

    视图文件:vip.py

    Html文件:index.html

     

    浏览器的结果:

     

  • 相关阅读:
    c#报错信息 显示详细行号
    分析器错误消息: “webgroup.admin.index”不扩展类“System.Web.UI.Page”,因此此处不允许
    ASP.NET下AJAX.AJAXMETHOD使用方法,微软ajax 异步 同步的修改方法
    Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值,jquery如果获取多个重复name的input的值
    utf8编码的mysql数据库 按照 中文来对 名称进行排序
    MVC新手教程二:Action使用非默认视图,强类型和强类型视图
    gcc 编译多个源文件
    嵌入式学习路径
    C语言基础知识:printf的输出格式
    C语言的数据类型
  • 原文地址:https://www.cnblogs.com/longxd/p/9071601.html
Copyright © 2020-2023  润新知