美文网首页DjangoPython
Django老男孩笔记进阶

Django老男孩笔记进阶

作者: 莫辜负自己的一世韶光 | 来源:发表于2019-02-24 13:58 被阅读19次

    Django的模板系统

    • 主要记住两种语法
      {{ }}{% %}
      变量相关的用{{}}, 逻辑相关的用{% %}

    示例:
    变量

    1. {{ name }} 变量
    2. for循环:
    {% for i in book_list %}
      {{forloop.counter}}
      {{forloop.last}}
      {{i}}
    {% endfor %}
    
    1. if判断
    {% if 10 > 5 %}
    {% else %}
    {% endif %}
    
    1. if ... in 判断
    {%  if name in name_list %}
    {% endif %}
    

    变量

    当模板语言中遇到一个变量的时候,它会先去计算这个变量的值,如果有值,就用这个值代替原来的变量,如果这个值不存在,就不显示.
    模板语言中.具有特殊的含义,当系统遇到.的时候会按照如下的顺序查询

    • 1.字典查询
    • 2.属性或者方法查询
    • 3.数字索引查询

    注意: 如果计算结果是一个方法,可以调用的,它将作为一个无参数来调用.调用的结果将作为模板的值.如果使用的变量不存在,模板系统将用空字符串来代替

    filter(过滤器)
    语法: {{value|filter_name:参数}}

    • default
      如果一个变量是false或者为空,则使用给定的默认值,否则,使用变量的值
    {{ value|default:"nothing"  }}
    

    如果value没有传值或者值为空的话就显示nothing

    • filesizeformat
      将值格式化为一个人类可读的文件尺寸(例如 '13kb','4.1 MB',默认原来的单位是字节)
    <p>文件大小: {{ file_size|filesizeformat }}</p>
    
    • length
      返回值的长度,作用于字符串和列表
    返回value的长度,如果是value=['a','b','c','d']的话就显示4
    
    • slice
      切片 类似于python的列表和字符串切片,只是写法不同,这里使用字单引号包起来,中间用分号分割.
    <p>切片: {{ name_list|slice:"1:-1" }}</p>
    <p>切片: {{ name|slice:"0:-1" }}</p>
    
    • date
      格式化
    {{  value|date: "Y-m-d H:i:s "}}
    
    <p>时间: {{ now|date:"Y-m-d H:i:s" }}</p>
    

    经过格式化后就变成下面这样


    • safe
      Django模板中默认会对是HTML标签和JS语法的标签进行字段转义,将其当成字符串显示到页面上.这样做的原因显而易见,
      是为了安全,但是有时候我们自己写代码的时候,也许需要自己添加一些标签或者js代码,这个时候,希望解除这种转义,让其把我们写的字符串当成是html标签或者是js,这个时候就可以使用value|safe的方法

    如果没有使用safe,页面是这么显示的

    <p>标签显示: </p>{{ html_str }}
    

    当成了一个字符串显示到页面上.

    如果使用了safe,则会当成一个标签嵌入到当前页面

    <p>标签显示:</p>{{ html_str|safe }}
    
    • truncatechars
      如果字符串字符多于指定的字符数量,那么会被截断.截断的字符串将以可翻译的省略号序列('....')结尾
      参数,要截取的字符串的长度
    <p>截断的字符串:{{ truncate_chars|truncatechars:9 }}</p>
    
    • 自定义filter
      自定义过滤器的使用步骤
      1. 首先是在app中创建一个模块名字叫templatetags,然后建立一个存放自定义的filter的文件

    2. 然后在自己创建的.py文件中,定义并注册自己定义的想要使用的filter

    使用我们自定义的filter

    {% load app01_filters %}
    <p>自定义filter的使用: {{ name|sb }}  {{ name|addstr:'第二个参数加起' }}</p>
    

    注意, 这里加载模板的时候必须先重新启动项目,不然找不到对应的模块

    for 循环

    • for 循环可以使用的一些参数


    • for ... empty
      当for循环没有任何数据的时候,需要显示的内容可以写到empty的后面.

    <ul>
    {% for user in user_list %}
        <li>{{ user.name }}</li>
    {% empty %}
        <li>空空如也</li>
    {% endfor %}
    </ul>
    

    if 判断

    with

    csrf_token

    注意

    母版

    • 母版和继承
    1. 为什么要有模板和继承:
      把多个页面公用的部分提取出来,放在一个母版里面.其他的页面只需要继承母版就可以了.
    2. 具体的使用步骤:
      1> 把公用的HTML部分提取出来,刚到base.html文件中,其他的页面只需要继承母版就可以了
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Title</title>
      {% block page-css %}
      
      {% endblock %}
    </head>
    <body>
    
    <h1>这是母板的标题</h1>
    
    {% block page-main %}
    
    {% endblock %}
    <h1>母板底部内容</h1>
    {% block page-js %}
    
    {% endblock %}
    </body>
    </html>
    

    组件 include

    静态文件相关

    simple_tag
    和自定义的filter类似,但是它可以接受任意个参数,并且它在使用的时候并不需要使用管道符.

    1. 在templatetags下创建一个py文件simple_tag.py,然后在里面定义一个函数,并注册

    2. 使用的时候,也是先加载

    inclusion_tag
    多用于返回html代码片段

    Django的视图系统

    视图的作用:
    接受web请求并且返回web响应
    无论视图本身包含什么逻辑,都要返回响应.我们一般约定视图写到对应的app的views.py中

    FBV 和 CBV

    Request对象和Response对象
    当一个页面被请求的时候,Django会创建一个包含本次请求的信息的HttpRequest对象.
    Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用request参数来接收这个对象.

    Request 对象

    上传文件
    对应的html写法

    上传文件的逻辑,注意使用的是chunks()

    Response对象

    httpResponse的使用

    JsonResponse
    JsonResponse是HttpResponse的子类


    使用JsonResponse代替原来的json.dumps()

    如何使用JsonResponse处理非字典的数据类型呢?

    image.png

    路由系统

    Django的路由系统的概述
    URL配置(URLconf)就像是Django所创建的网站的目录.它本质上是URL和该URL要调用的视图函数之间的映射表
    Djang就是用这种方式告诉程序,对于这个URL调用这段代码,对于那个URL调用那段代码.

    正则表达式详解



    相关文章

      网友评论

        本文标题:Django老男孩笔记进阶

        本文链接:https://www.haomeiwen.com/subject/orfryqtx.html