目录
dispatch
url(r'^book/(\d+)/(\d+)/',views.Book.as_view()),
views.py
from django.shortcuts import render,HttpResponse from django.views View class Book(View): def get(self,request,year,month): return HttpResponse(year+ month + 书籍') post(self,1)">pass
针对这个问题,class-based view提供了一个as_view()静态方法(也就是类方法)
调用这个方法,会创建一个类的实例,然后通过实例调用dispatch()方法
dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get(),post() 等)
'''重点: 反射,将请求方法分发到同名的类方法去处理''' def dispatch(self,*args,**kwargs): if request.method.lower() in self.http_method_names: handler = getattr(self,request.method.lower(),self.http_method_not_allowed) else: handler = self.http_method_not_allowed return handler(request,**kwargs)
View kwargs): print(dispatch front) ret = super().dispatch( request,**kwargs) # 继承父类dispatch的所有内容 dispatch behind) return ret get methodpass 执行结果''' dispatch前 get方法 dispatch后
render home(request): username = SByaya' 可以传字符串 num = 10 可以传数字 lst1 = [11,22,33] 可以传列表 dict1 = {k1':v1k2v2'} 可以传字典 A: def __init__(self): self.name = yayasillydog' get_name(self): return self.name + 太蠢了 a = A() 可以传类对象 dic = { username:username,num:num,1)">lst1:lst1,1)">dict1:dict1,1)">a:a,} return render(request,1)">home.htmlhome.html<!DOCTYPE html> <html lang="zh-CN"head> Meta charset="utf-8"</body> h1>Welcome to dog's home!!>{{ username }}>{{ num }}>{{ lst1 }}>{{ lst1.1 }}> <!-- 用点索引来取值 --> >{{ dict1 }}>{{ dict1.k1 }} 字典.键来取值 >{{ a.name }} 可以获取对象里的属性 >{{ a.get_name }} 只能获取对象里的无参方法,不能够获取有参方法 --> html>
语法:{{ value|filter_name:参数 }}
注意点:管道符两边不能有空格,有参数的冒号加参数,无参数的不需要冒号
如果一个变量没有传值或者值为空,使用给定的默认值。 否则,使用变量的值。
没有传值
没有传值yayapig 可以传字符串 dic = { 'username':username,# 没有传username }值为空 username = ''default默认值语法
p> {{ username|default:'Libolun' }} p
{{ username|length }} >
{{ file_size|filesizeformat }} >
{{ msg|slice:'0:4' }} >
{{ current_time|date:"Y-m-d H:i:s" }} 注意分钟是用i来表示 >
使用safe的目的:防止xss攻击(跨站脚本攻击)
views.py
test(requqest): a_tag = <a href="">某宝</a>' test.htmla_tag':a_tag})test.html
<p> {{ a_tag|safe }} </p>
{{ msg|truncatechars:7 }} >
{{ msg|truncatewords:2 }} >
{{ msg|cut:' ' }} 去除value中所有的空格 >
{{ list1|join:'+' }} 等同于python中的"+".join(list1) >
ul {% for i in lst1 %} li>{{ i }} {% empty %} span>哥,啥也木有啊 {% endfor %} 如果lst1为空,或者后台没有给lst1数据,那么就展示empty下面的内容 -->
{% for k,v in dic1.items %} >{{ k }}--->{{ v }} 在循环中,可以接dic1.keys values items -->
{% for i in lst1 %} >{{ i }}--->{{ forloop.counter }} {% if forloop.last %} {% for ii in i %} >{{ ii }}--->{{ forloop.counter }}--->{{ forloop.parentloop.counter }} {% endfor %} {% endif %} {% endfor %} >forloop用法
forloop.counter 当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能 forloop.counter0 当前循环的索引值(从0开始) forloop.revcounter 当前循环的倒序索引值(从1开始) forloop.revcounter0 当前循环的倒序索引值(从0开始) forloop.first 当前循环是不是第一次循环(布尔值) forloop.last 当前循环是不是最后一次循环(布尔值) forloop.parentloop 本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断,注意条件两边都有空格。
views.py
home(request): number = 102 dic =number:number,dic)home.html
{% if number == 100 %} >猜对了 {% elif number == 101 %} >101不对呀 {% else %} >这更不对了 {% endif %}
{% if user_list|length > 5 %} 结合过滤器来使用--> 可以可以 {% else %} 不行不行 {% endif %}组件
在前端中,就是把一套完整的样式封装起来,供其他人使用
在index.html中如果我们想使用已经封装好的zujian.html,该怎么引入呢?
index.html
{% include 'zujian.html' %}zujian.html
="en"="UTF-8"title>Titleh1 style="color:red;">这是导航栏>
2.在setting.py中写入如下内容
STATIC_URL = /static/别名 STATICFILES_Dirs = [ os.path.join(BASE_DIR,1)">jingtaiwenjian'), 注意别忘了写逗号,第二个参数就是项目中你存放静态文件的文件夹名称 ]3.在html文件中使用别名
设置STATIC_URL的意义
别名也是一种安全机制,浏览器上通过调试台你能够看到的是别名的名字,这样别人就不能知道你静态文件夹的名字了,不然别人就能通过这个文件夹路径进行攻击。
STATIC_URL的用法
两种引入方式 link rel="stylesheet" href="/static/css/test.css"="{% static 'css/test.css' %}" 导入一张图片 img src="/static/imgs/test.png" alt="" 引入js文件 script ="/static/js/xx.js"></script>版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。