一、视图

  (1)请求对象之request

    django里将浏览器端传来的请求消息封装成request,在views里可以调用。

    request.method: 显示的是GET还是POST请求。默认浏览器地址栏输入的都是GET请求。

    request.path:获取url除去参数数据部分的路径

    request.get_full_path():将url包括参数数据的路径全部获取

    还有一些其他方法等。is_ajax():判断是否为ajax请求

  (2)响应对象

    通过Httpresponse返回指定内容

    通过 render()方法 return render(reques,‘index.html’)来返回一个页面,其本质实在Httpresponse上做了一些操作封装成render。

    其中render方法还有第三个参数render(reques,‘index.html’,{“fun_name”:var_method})

    这是用了模板的方法,在html页面中使用{{fun_name}},然后django就会把定义的方法变量传给html页面来返回给浏览器解析。其中fun_name为html中

    {{}}的方法名,var_method为views函数内对应的变量名。

二、模板

  模板文件存在template下,指的是html文件,但是其中有模板语法。

  语法有两个:

  (1):{{}}--变量 

  views和html配置:

  其中locals方法是显示本地所有的变量

def def_path(request,):
    i = 10
    j = [1,2,3]
    k = {"name":'test1',"age":2}
    o1 = object
    t = True
    return render(request,'index.html',locals())
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
test
<p>{{i}}</p>
<p>{{j}}</p>
<p>{{k}}</p>
<p>{{o1}}</p>
<p>{{t}}</p>
<p>{{k.name}}</p>
</body>
</html>

  在浏览器上的显示:

  

    深度查询:指的是在html中 <p>{{k.name}}</p>这样的类似于python取值,浏览器来查看views下函数定义的方法变量内容。

    过滤器:模板中自带的一些过滤方法。格式:{{var_name|xx:"xxxx"}},var_name对应的是views函数下的变量名。

        1:default   {{value|default:'nothing'}}    默认值设置为空

        2:date     {{value|date:"Y-m-d"}}    格式化日期

        3:length    {{value|length}}      返回值的长度

        4:filesizeformat   {{value|filesizeformat}}  将返回值格式化为一个文件尺寸

        5:slice    {{value|length}}  字符串切片

        6:truncatechars(truncatewords)    {{value|truncatechars:9}}  用来截断数据,默认包含结尾的三个点,因此实际看的数量少三个。

            truncatewords和truncatechars不同之处在于,words以单词来截断,chars以字符来截断。

        7:safe {{linke|safe}}   django自带一种机制,当服务器响应浏览器提交一些<>文本内容执行时,如果不转译,那么到时候浏览器直接当做命令执行导致错误。因此

              使用safe告诉处理程序不用转译。

  (2){% %}--标签

    1:for标签

      格式:     

{% for i in l %}
<p>{{i}}</p>
<p>{{key}}:{{val}}</p>
{% endfor %}

    循环遍历列表、字典等

    如果要在循环的东西前面加上序数,则使用forloop.counter0(forloop.counter),从0开始或者从1开始

    forloop.revcounter则表示反序列计数。

    还有for empty组合,表示当列表为空时,可以打印显示为空,不然页面上无法得知是空还是有问题。

    

{% for i in l %}
<p>{{i}}</p>
<p>{{key}}:{{val}}</p>
{% empty %}
<p> is empty</p>
{% endfor %}

    2:if标签

    

{% if user %}
<p>
    <a href =''> hi {{user}}</a>
</p>
{% else %}
<p>
    <a href =''>登录</a>
</p>
{% endif %}

    通过user的值来选择显示什么样的标签

    3:with标签

      类似于python with as,起个别名,缩写方便编写  

{% with i as n}
{{n}}}
{% endwith %}

    4:csrf_token

     用于跨站请求伪造保护。在django的settings下的 MIDDLEWARE配置上,有csrf保护,默认使用POST会forbidden,,那么就要使用这个标签来通过。

{% csrf_token %}

  使用这个标签会默认产生一个<input type='hidden' name=‘xx’ value=‘xxx’>,里边值会随机变动。

  (3)自定义过滤器和标签

    1:自定义过滤器

      首先在settings的INSTALLED_APPS配置当面的应用

      然后在应用中创建templatetags(固定的名字)模块

      创建py文件,设置自定义过滤器

        

from django import template
register=template.Library()

@register.filter
def filter_test(x,y):
  return x*y

      在html文件中设置:

      

{% load filter_test %}
<
p>{{i|filter_test:20}}</p>

    2:自定义标签

      和自定义过滤器基本一致,只是在html中调用时:

 

{% load filter_test %}
<p>{% filter_test 10 20 %}</p>

    但是过滤器只能2个参数,标签参数数量则不固定。

    不过过滤器可以和if联合灵活应用,标签则不可以,各有优缺点。

  (4)继承

    1:include  

{% include 'part1.html' %}

    主要作用是新建html时可以调用以前设计好的html,实现一种插入功能。

    2: block   

{% extends %} 必须放在第一行
{% block name %}
...... {% endblock %}

    通过extends继承框架样式,然后再通过block添加自己的内容样式

    要注意的是在父html页面中也要写上子页面需要自己设置的地方,例如:

<div>
    {% block name %}
    {% endblock %}
</div>

  这样子页面便可以继承父页面的样式,并且还可以在父页面指定的地方设置自定义样式。

    最后block也可以继承父页面block里边的东西,用{{ block.super }} 实现。