一、视图
(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 }} 实现。
浙公网安备 33010602011771号