zoukankan      html  css  js  c++  java
  • django框架之模板系统

    MVC框架

      MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

    MTV框架:

      Model(模型):负责业务对象与数据库的对象(ORM)

           Template(模版):负责如何把页面展示给用户

           View(视图):负责业务逻辑,并在适当的时候调用Model和Template

    Django模板中只需要记两种特殊符号:

    {{  }}和 {% %}

    {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作

    {{ 变量名 }}

    变量名由字母数字和下划线组成。

    点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。

    举例:

    view中的代码:

    def test(request):
        name = 'alex'
        age = 83
        name_list = ['和尚','阿三','阿瑟东','独家']
    
        return render(request,'test.html',{
            'name':name,
            'age':age,
            'name_list':name_list,
        })

    模板中的代码:

    <p>{{ name }}</p>
    <p>{{ age }}</p>
    <p>{{ name_list }}</p>
    <ul>
        {% for name in name_list %}
            <li>{{ name }}</li>
        {% endfor %}
    </ul>
    <hr>
    {{ name_list.0 }}
    {{ name_list.1 }}
    {{ name_list.2 }}
    {{ name_list.3 }}

    列表中的名字可以通过for循环取出,也可以用 . 索引 取出。

    字典中的名字是通过  . key  取出 ,也可以通过for循环取

    例子:

    views中的代码:

     name_dict = {
            'name1': '和尚',
            'name2': '和尚贼秃',
            'name3': '杜标',
            'name4': '杜菊飞',
        }

    模板html的代码:

    {{ name_dic }}
    {{ name_dic.name1 }}
    {{ name_dic.name2 }}
    {{ name_dic.name3 }}

    {% for i in name_dic.values %}
    {{ i }}
    {% endfor %}

    {% for key,value in name_dic.items %}
    {{ key }}:{{ value }}
    {% endfor %}

    也可以将类渲染到模板中,类的取值可以通过调用 类.属性名或方法名 来获取值。例子:

    views中的代码:

    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            return '<Person object: {}>'.format(self.name)
        def dream(self):
            return '{}我想带你去浪漫的西二旗,然后一起去上地做面试题,其实我比较喜欢望京西'.format(self.name)
      def __repr__(self):
    return '<Person object: {}>'.format(self.name)

      
    def test(request): p1 = Person('alex',22) p2 = Person('qwer',25) return render(request,'test.html',{ 'p1':p1, 'p2':p2,
         P_list = [p1,p2]  })

    模板中的代码:

    {{ p1 }}
    {{ p1.name }}
    {{ p1.age }}
    {{ p1.dream }}
    <br>
    {{ p2 }}

    这里插入一个小知识:

    class中 __init__方法和__repr__方法的区别:

       如果是直接调用类中的属性或方法,则用的是__init__方法,如果是程序调用类中的属性或方法,就用的是__repr__方法,上述代码中,如果将p1,p2放在列表中,通过P_list列表调用类的属性或方法,就调用的是__repr__方法。在python2中__repr__的方法叫做__unicode__。

    Filters:

    翻译为过滤器,用来修改变量的显示结果。

    语法: {{ value|filter_name:参数 }}

    '|'左右没有空格没有空格没有空格

    default

    {{ value|default:"nothing"}}
    注:TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用
    例子:
    {{ qwer|default:'没有传这个值,使用默认值' }}

    filesizeformat

    将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:

    views代码:

    file_size1 = 1024
    file_size2 = 1024*1024

    模板中的代码:

    {{ file_size1|filesizeformat }}
    {{ file_size2|filesizeformat }}

    add

    给变量加参数  可是以实现数字加法,字符串拼接,列表的拼接

    {{ value|add:"2" }}

    value是数字4,则输出结果为6。

    {{ first|add:second }}

    如果first是 [1,.2,3] ,second是 [4,5,6] ,那输出结果是 [1,2,3,4,5,6] 。

    lower

    小写

    {{ value|lower }}

    upper

    大写

    {{ value|upper}}

    title

    标题

    {{ value|title }}

    ljust

    左对齐

    "{{ value|ljust:"10" }}"

    rjust

    右对齐

    "{{ value|rjust:"10" }}"

    center

    居中

    "{{ value|center:"15" }}"

    length

    {{ value|length }}

    返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

    slice  

    切片

    {{value|slice:"2:-1"}}

    first

    取第一个元素

    {{ value|first }}

    last

    取最后一个元素

    {{ value|last }}

    join

    使用字符窜拼接列表。同python的str.join(list)。 可以将列表拼接成字符串

    {{ value|join:" // " }}

    truncatechars

    如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

    参数:截断的字符数

    {{ value|truncatechars:9}}

    date

    日期格式化

    view中的代码:

    import datetime
        date_now = datetime.datetime.now()
      date_day = datetime.date()
    print('1111111', date_now)

    模板中的代码:

    {{ date_now|date:'Y-m-d H:i:s' }}<br>
    {{ date_now}}
    {{ date_day}}

    如果不想再模板后面加参数可以现在setting中进行设置,

    safe

    views代码:

    value = "<a href='#'>点我</a>"

    模板中的代码:

    {{ value|safe }}
    {{ value }}

    自定义filter:

    自定义过滤器只是带有一个或两个参数的Python函数:

    • 变量(输入)的值 - -不一定是一个字符串
    • 参数的值 - 这可以有一个默认值,或完全省略

    例如,在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”

      在app01下面新建一个package,名字必须为templatags,然后再这个文件夹下新建一个py文件,然后就在这个py文件里写自己的filter过滤器。

    from django import template
    register = template.library()
    
    @register.filter   #如果后面有name参数:@register.filter(name='sb'),
                #就相当于给add_sb的过滤器起了个别名,那么在模板中使用的时候,就要用sb这个别名。

    def add_sb(value,arg): return '{}_{}_sb'.format(value,arg)

    然后再模板中,先导入自己定义的myfilters文件,然后取值:

    {%load myfilters%}
    {{name_list.0|add_sb:'就是'}}   #@register.filter(name='sb')使用name参数后,就应该写成
                      #{{name_list.0|sb:'就是'}}


    #如果给arg赋上值,模板中就不需要写参数了
    {{name_list.1|add_sb}}

  • 相关阅读:
    上传图片至fastdfs显示连接超时
    Linux上安装maven
    multipartFile.getOriginalFilename();不能获取原文件名称,也就是含有路径名
    /usr/bin/ld: cannot find -lfdfsclient
    linux开放22端口
    Ajax上传file出现的bad request问题
    easyui combobox实现下拉自动提示补全功能
    js格式化时间
    codeforces 780B
    codeforces 61 D 115 A
  • 原文地址:https://www.cnblogs.com/yb635238477/p/9392544.html
Copyright © 2011-2022 走看看